1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 求最小生成树-Kruskal(克鲁斯卡尔算法)

求最小生成树-Kruskal(克鲁斯卡尔算法)

时间:2024-01-20 15:59:15

相关推荐

求最小生成树-Kruskal(克鲁斯卡尔算法)

克鲁斯卡尔算法时间复杂度与排序算法sort有关,适合于稀疏图。

#include <iostream>using namespace std;#define Maxsize 100typedef char VertexType;typedef int EdgeType;typedef struct{VertexType Vex[Maxsize];EdgeType edge[Maxsize][Maxsize];int vexnum,arcnum;}MGraph;typedef struct{int a,b;//a、b为一条边的两个顶点int w;//w为边的权值 }Road;Road road[Maxsize];int v[Maxsize];//定义并查集数组 int getRoot(int a){//在并查集中查找根结点 while(a!=v[a])a=v[a];return a;}void Kruskal(MGraph G,int &sum,Road road[]){int i,N,E,a,b;N=G.vexnum;E=G.arcnum;sum=0;for(i=0;i<N;i++)v[i]=i;sort(road,E);//对road数组中的E条边按其权值从小到大排序for(i=0;i<E;i++){a=getRoot(road[i].a);b=getRoot(road[i].b);if(a!=b){//不在一个集合中 v[a]=b;//合并两棵树sum+=road[i].w;//求生成树权值 }} }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。