看了一上午才看懂~~渣渣学习中
#include <stdio.h> #include <string.h> #define inf 0x3fffffff int visit[101],map[101][101],minpos[101],n; int prim() { int pos,t=0,ant=0,p,min; visit[0]=1; minpos[t++]=0; while(t<n) { min=inf; for(int i=0;i<t;i++) { p=minpos[i]; for(int j=0;j<n;j++) { if(min>map[p][j]&&!visit[j]) min=map[p][j],pos=j; } } ant+=min; minpos[t++]=pos; visit[pos]=1; } return ant; } int main() { int x; while(scanf("%d",&n)!=EOF) { memset(visit,0,sizeof(visit)); memset(map,inf,sizeof(map));//map初始为最大值 for(int i=0;i<n;i++) for(int j=0;j<n;j++) { scanf("%d",&x); map[i][j]=map[j][i]=x; } printf("%d\n",prim()); } }
原文地址:http://blog.csdn.net/su20145104009/article/details/45023221