鱼C论坛

 找回密码
 立即注册
查看: 3333|回复: 1

[技术交流] 考考你这普里姆算法错在哪?

[复制链接]
发表于 2015-4-15 20:52:36 | 显示全部楼层 |阅读模式
10鱼币
直入正题上代码:#include<stdio.h>
#define MaxVertexNum 20
#define INF 32767
typedef struct
{
       int vexs[MaxVertexNum];
       int AdjMatrix[MaxVertexNum][MaxVertexNum];
       int vexnum,arcnum;
}MGraph;
typedef struct
{
       int begin,end;
       int cost;
}TreeEdge;
void CreatMGraph1(MGraph &G)
{
       int i,j,k,x;
       printf("请输入顶点数和边数(输入格式为:顶点数 边数):\n");
       scanf("%d %d",&(G.vexnum),&(G.arcnum));
       for(i=0;i<G.vexnum;i++)
                for(j=0;j<G.vexnum;j++)
                          G.AdjMatrix[i][j]=INF;
       printf("输入%d条边,格式:行下标 列下标边上的权值<CR>\n",G.arcnum);
       for(k=0;k<G.arcnum;k++)
       {
                scanf("%d %d %d",&i,&j,&x);G.AdjMatrix[i][j]=x;
                G.AdjMatrix[j][i]=G.AdjMatrix[i][j];
       }
}
void Prim(MGraph &G)
{
       int n=G.vexnum;
       int lowerCost[MaxVertexNum],mincost=0,closeVertex[MaxVertexNum];
       TreeEdge close[MaxVertexNum];
       int i,j,k,sum=0;
       for(i=1;i<n;i++)
       {lowerCost[i]=G.AdjMatrix[0][i];closeVertex[i]=0;}
       lowerCost[0]=0;
       closeVertex[0]=0;
       for(i=1;i<n;i++)
       {
                mincost=INF;
                j=1;k=1;
                while(j<n)
                {
                          if(lowerCost[j]!=0&&lowerCost[j]<mincost)
                          {mincost=lowerCost[j];k=j;}
                          j++;
                }
                close[i-1].begin=closeVertex[k];close[i-1].end=k;close[i-1].cost=mincost;
                sum=sum+mincost;
                lowerCost[k]=0;
                for(j=1;j<n;j++)
                          if(G.AdjMatrix[k][j]<lowerCost[j])
                          {lowerCost[j]=G.AdjMatrix[k][j];closeVertex[j]=k;}
       }
       printf("最小生成树如下所示:\n始点  终点  权值\n");
       for(i=0;i<n-1;i++)
       {printf("%d %d %d\n",close[i].begin,close[i].end,close.cost);}
       printf("最小生成树的总权和为%d\n",sum);
}
void main()
{
       MGraph G;
       CreatMGraph1(G);
       Prim(G);
}

[/i][/i][/i][/i][/i][/i][/i][/i][/i]

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-22 09:44:29 | 显示全部楼层
:sweat:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 05:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表