我正在尝试使用不相交的函数(findset,makeset,union)来实现kruskal算法,并且这些函数可以工作,但是我似乎无法理解Kruskal函数的问题所在。
void kruskal(Graf *G, int n,Edge *E[], const int nrEdges) {
struct Edge*A[5000];
insertionSort(E, nrEdges);
for (int i = 0; i < n; i++) {
G->V[i]=make_set(i);
}
for (int j = 0; j < n; j++) {
//printf("%d\n", j);
if (find_set(G->E[j]->src) != find_set(G->E[j]->dest)) {
A[cnt++] = G->E[j];
set_unions(G->E[j]->src, G->E[j]->dest);
}
}
cnt = 0;
}
这是我尝试打印结果的位置: ...
printf("\n Kruskal's alg:\n ");
Edge **ed;
kruskal(G, 9, G->E, 14); //DE CE CRAPIII
for (int i = 0; i < 14; i++) {
printf("%c -> %c with a cost of %d\n", 'a' + G->E[i]->src->info, 'a' + G->E[i]->dest->info, G->E[i]->weigth);