永发信息网

急!数据结构最小生成树prim算法C语言实现

答案:1  悬赏:60  手机版
解决时间 2021-03-27 01:28
  • 提问者网友:活着好累
  • 2021-03-26 17:37
急!数据结构最小生成树prim算法C语言实现
最佳答案
  • 五星知识达人网友:雾月
  • 2021-03-26 19:06
Kruskal算法:
void Kruskal(Edge E[],int n,int e)
{
int i,j,m1,m2,sn1,sn2,k;
int vset[MAXE];
for (i=0;i k=1; //k表示当前构造最小生成树的第几条边,初值为1
j=0; //E中边的下标,初值为0
while (k {
m1=E[j].u;m2=E[j].v; //取一条边的头尾顶点
sn1=vset[m1];sn2=vset[m2]; //分别得到两个顶点所属的集合编号
if (sn1!=sn2) //两顶点属于不同的集合,该边是最小生成树的一条边
{
printf(" (%d,%d):%d/n",m1,m2,E[j].w);
k++; //生成边数增1
for (i=0;i if (vset[i]==sn2) //集合编号为sn2的改为sn1
vset[i]=sn1;
}
j++; //扫描下一条边
}
}
Prim算法:
void prim(MGraph g,int v)
{
int lowcost[MAXV],min,n=g.vexnum;
int closest[MAXV],i,j,k;
for (i=0;i {
lowcost[i]=g.edges[v][i];
closest[i]=v;
}
for (i=1;i {
min=INF;
for (j=0;j if (lowcost[j]!=0 && lowcost[j] {
min=lowcost[j];k=j;
}
printf(" 边(%d,%d)权为:%d/n",closest[k],k,min);
lowcost[k]=0; //标记k已经加入U
for (j=0;j if (g.edges[k][j]!=0 && g.edges[k][j] {
lowcost[j]=g.edges[k][j];closest[j]=k;
}
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯