Počítačová síť
Limit: 2s
Jak na to:
Mnohem lépe vysvětlené než na přednáškách včetně praktických ukázek pseudokódu:Hledání minimální kostry a UNION-FIND problém
Přidávám svůj generátor grafů pro tuhle úlohu. Snad někomu pomůže. Pro opravdu velké grafy je nutné krapet přepsat a flushovat více String Buildery
public class MatrixGenerator {
public static void main(String[] args) { if(args.length!=4){ System.out.println("Run the program with [nodes] [connections] [edges] [full/random/noconn] params."); return; } final int NODES = Integer.parseInt(args[0]); final int CONNECTIONS = Integer.parseInt(args[1]); final int EDGES = Integer.parseInt(args[2]); final String type = args[3]; if("full".equals(type.toLowerCase())){ makeFullGraph(NODES,CONNECTIONS); }else if("random".equals(type.toLowerCase())){ makeRandomGraph(NODES, CONNECTIONS,EDGES); }else{ makeNotConnectableFullGraph(NODES,CONNECTIONS); } } public static void makeRandomGraph(int NODES,int CONNECTIONS, int EDGES){ StringBuilder sb = new StringBuilder(); final boolean random = true; sb.append(NODES); sb.append("\n"); sb.append(CONNECTIONS); sb.append("\n"); for(int i = 0 ; i<= EDGES ; i++){ int x = (int)(1+((Math.random()*NODES)%(NODES-1))); int y = (int)(1+((Math.random()*NODES)%(NODES-1))); if(x == y){ i--; continue; } sb.append(x); sb.append(" "); sb.append(y); sb.append(" "); sb.append(getWeight(random)); sb.append("\n"); } sb.append("0 0 0\n"); System.out.println(sb.toString()); }
public static void makeNotConnectableFullGraph(int NODES,int CONNECTIONS) { final boolean random = true; StringBuilder sb = new StringBuilder(); sb.append(NODES+CONNECTIONS+1); sb.append("\n"); sb.append(CONNECTIONS); sb.append("\n"); for (int i = 1; i <= NODES; i++) { for (int y = 1; y <= NODES; y++) { if (i != y) { sb.append(y); sb.append(" "); sb.append(i); sb.append(" "); sb.append(getWeight(random)); sb.append("\n"); } } } sb.append("0 0 0\n"); System.out.println(sb.toString()); } public static void makeFullGraph(int NODES,int CONNECTIONS) { final boolean random = true; StringBuilder sb = new StringBuilder(); sb.append(NODES); sb.append("\n"); sb.append(CONNECTIONS); sb.append("\n"); for (int i = 1; i <= NODES; i++) { for (int y = 1; y <= NODES; y++) { if (i != y) { sb.append(y); sb.append(" "); sb.append(i); sb.append(" "); sb.append(getWeight(random)); sb.append("\n"); } } } sb.append("0 0 0\n"); System.out.println(sb.toString()); }
public static int getWeight(boolean random) { if (random) { return (int) (Math.random() * 99 + 1); } else { return 10; } }
}