马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
void InsertSort(Edge r[],int n)
{
int i,j;
for(i=2;i<n;i++)
{
if(r[i].w<r[i-1].w)
{
r[0]=r[i];
j=i-1;
while(r[0].w<r[j].w&&j>=1)
{
r[j+1]=r[j];
j=j-1;
}
r[j+1]=r[0];
}
}
}
void Kruskal(MGraph g)
{
int i,j,u1,v1,sn1,sn2,k;
int vset[MAXV];
Edge E[MAXV];
k=0;
printf("克鲁斯卡尔算法:\n");
for(i=0;i<g.n;i++)
for(j=0;j<g.n;j++)
if(g.edges[i][j]!=0&&g.edges[i][j]!=INF)
{
E[k].u=i;
E[k].v=j;
E[k].w=g.edges[i][j];
k++;
}
InsertSort(E,g.e);
for(i=0;i<g.n;i++)
vset[i]=i;
k=1;
j=0;
while(k<g.n)
{
u1=E[j].u;
v1=E[j].v;
sn1=vset[u1];
sn2=vset[v1];
if(sn1!=sn2)
{
printf("边(%d,%d)权为:%d\n",u1,v1,E[j].w);
k++;
for(i=0;i<g.n;i++)
if(vset[i]==sn2)
vset[i]=sn1;
}
j++;
}
}
怎么修改 |