int mst_kruskal(graph *g, edge *elist, double (*cost)(graph *g, edge e)) { edge *edges; edge e; int k; edges = (edge *) malloc(sizeof(edge) * number_of_edges(g)); k = 0; forall_edges(e,g) { edges[k++] = e; } for (k=0; k<number_of_edges(g); k++) { if (k % 6 == 0) printf("\n"); printf("%f ", get_distance(g,edges[k])); } printf("\n"); return 0; }
} std::vector<NodeID> sources(G.number_of_edges(), 0); std::vector<NodeID> targets(G.number_of_edges(), 0); forall_nodes(G, node) { forall_out_edges(G, e, node) { NodeID target = G.getEdgeTarget(e); sources[e] = node; targets[e] = target; } endfor } endfor //now find two random leafes NodeID v_1, v_2; unsigned r_idx = random_functions::nextInt(0, G.number_of_edges()-1); while(true) { NodeID source = sources[r_idx]; NodeID target = targets[r_idx]; if( parent[source] != target && parent[target] != source) { //found a non-tree edge v_1 = source; v_2 = target; break; } r_idx = random_functions::nextInt(0, G.number_of_edges()-1); } // NodeID now climb up the parent array step wise left and right std::vector<NodeID> lhs_path, rhs_path;