对图中的图 求出她所有的最小二叉树图中有2棵最小树 要求用kruscal 算法
我想到的是 要在排序函数中产生2 组排序 1 2 3 4 4 * 5
1 2 3 4* 4 5 我用的是选择排序 但没弄出来 求大神给指导下 谢谢
void kruskal(mgraph g)
{
int i,j;
int k;
int u1,v1,sn1,sn2;
edge e1[MS]; //边权值列表
int vset[MS]; //顶点链接判断列表
k=0;
for(i=0;i<g.d;i++) //边权值列表初始化
{
for(j=0;j<g.d;j++)
if(g.edges[i][j]!=0&&g.edges[i][j]!=inf)
{
e1[k].q=i; e1[k].z=j; e1[k].w=g.edges[i][j];
k++;
}
}
//对 edga 进行排序 (从小到大)
sort(e1,k);
for(i=0;i<g.d;i++) //初始化辅助数组
vset[i]=i;
k=1;
j=0;
while(k<g.d)
{
u1=e1[j].q; v1=e1[j].z;
sn1=vset[u1]; sn2=vset[v1];
if(sn1!=sn2)
{
printf("边(%d,%d)权为:%d \n",sn1,sn2,e1[j].w);
k++;
for(i=0;i<g.d;i++) //归 sn1 和 sn2 与一个数组
if(vset[i]==sn2)
vset[i]=sn1;
}
j++;
}
}
//选择排序
void sort(edge e1[MS],int b)
{
int i,j;
int k;
edge tomp;
for(i=0;i<b;i++)
{
k=i;
for(j=i;j<b;j++)
{
if(e1[k].w>e1[j].w)
k=j;
}
tomp=e1[k];
e1[k]=e1[i];
e1[i]=tomp;
}
}
求大哥大姐 帮帮忙 看下要怎样改!!!!!