克鲁斯卡算法 并查集实现最小生成树(伪代码)

来源:互联网 发布:合肥网络推广公司 编辑:程序博客网 时间:2024/05/22 09:06

克鲁斯卡算法思想:

       在无向图中按照边的权值从小到大排序,然后从最小边开始扫描,并且检测当前边是否为候选变,即是否该边会构成回路,如不构成,则将该边并入当前的生成树

typedef struct{int a,b;int weight;}Road;Road road[maxSize];int v[maxSize];                 //定义并查集数组int getRoot(int a){              //在并查集中查找根节点的函数if(a!v[a])     a = v[a];return a;}void Kruskal(MGraph g, int &sum, Road road[]){int i;int N,E,a,b;N = g.n;E = g.e;sum = 0;for(i = 1;i <= N ;i ++)v[i] = i;sort(road, E);for(i = 1;i <=E; i++){a = getRoot(road[i].a);b = getRoot(road[i].b);if(a!=b){v[a] = b;sum += road[i].weight;}}}


0 0