假设road[ ]数组中已经存放了图中各边及其连接的两个顶点的信息,且排序函数已经存在,克鲁斯卡尔算法代码如下:
typedef struct{
int a,b;
int 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;
int N,E,a,b;
N = g.n;
E = g.e;
sum = 0;
for(i=0;i<N;++i) v[i] = i;
sort(road,E);
for(i=0;i<E;++i)
{
a = getRoot(root[i].a);
b = getRoot(root[i].b);
if(a!=b)
{
v[a] = b;
sum+=road[i].w;
}
}
}