Prime算法实现最小生成树

来源:互联网 发布:王侯将相宁有种乎 很燃 编辑:程序博客网 时间:2024/05/29 03:20
#include<string.h>#define INF 1000#define MAXN 21int n,m;int Edge[MAXN][MAXN];int lowcost[MAXN];int nearvex[MAXN];void prime(int u0){int i,j;int sumweight=0;int min=INF;int v=-1;for(i=1;i<=n;i++){lowcost[i]=Edge[u0][i];//到最小生成树的最近的点nearvex[i]=u0;}nearvex[u0]=-1;for(i=1;i<n;i++){min=INF;v=-1;       //根据lowcost找出下一个开销最小的点 vfor(j=1;j<=n;j++){if(nearvex[j]!=-1 && lowcost[j]<min){v=j;min=lowcost[j];} }if(v!=-1){printf("%4d%4d%4d\n",nearvex[v],v,lowcost[v]);nearvex[v]=-1;sumweight+=lowcost[v];for(j=1;j<=n;j++){if(nearvex[j]!=-1 &&Edge[v][j]<lowcost[j]){lowcost[j]=Edge[v][j];nearvex[j]=v;}}}}printf("weight of MST is: %d\n",sumweight);}int main(){int i,j;int u,v,w;scanf("%d%d",&n,&m);memset(Edge,0,sizeof(Edge));for(i=1;i<=m;i++){scanf("%d%d%d",&u,&v,&w);Edge[u][v]=Edge[v][u]=w;}for(i=0;i<=n;i++){for(j=0;j<=n;j++){if(i==j)Edge[i][j]=0;else if(Edge[i][j]==0)Edge[i][j]=INF;}}prime(1);system("PAUSE");return 0;}

0 0
原创粉丝点击