求最小生成树 —— 卡鲁思卡尔算法

 

算法思想:

将图中边按照权值从小到大排序(可以使用堆排序),然后从最小的边开始扫描,设置一个边的集合来记录,如果该边并入不构成回路(可以使用并查集来判断是否构成回路)的话,则将该边并入当前生成树。直到所有的边都检测为止。



实现代码:

#define MAXSIZE 100typedef struct {int a, b; //边的两个顶点int weight; //边的权值
} Edge; //边结构体int Find(int *parent, int x) {while(parent[x]>=0)  //循环向上寻找下标为x顶点的根x=parent;return x;  //while循环结束时找到了根的下标
}Edge edges[MaxEdge];  //边数组
int parent[MaxVex];  //父亲顶点数组(查并集)void MiniSpanTree_Kruskal(Mgraph G) {int i, n, m;sort(edges);  //按权值由小到大对边排序for(i=0; i%d”, edges[i].a, edges[i].b);}}
}

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部