//use union find and skew tree Graph* Tree::Kruskal(Graph* g){ Skew* C = new Skew(); Set* Cyc = new Set(g->size); int final[g->size][g->size]; int n = g->size * g->size; int count = 0; for(int i = 0; i < g->size; i++) { for(int j = 0; j < g->size; j++) { final[i][j] = 0; if(g->edges[i][j] != 0) { int cost = g->edges[i][j]; g->edges[j][i] = 0; Node* n = new Node(); n->edge[0] = i; n->edge[1] = j; n->value = cost; C->insert(n, C->root); } } } while(C->root != nullptr && count <n-1) { Node* x = C->root; C->deleteMin(C->root); int v = x->edge[0]; int w = x->edge[1]; int fv = Cyc->find(x->edge[0]); int fw = Cyc->find(x->edge[1]); if(fv != fw) { final[v][w] == 1; final[w][v] == 1; Cyc->Sunion(v, w); } }