http://acm.hdu.edu.cn/showproblem.php?pid=1863
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 15980 Accepted Submission(s): 6627
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <algorithm> #define Maxint 1<<30 int n; int map[105][105],low[105],visit[105]; int prim() { int i,j,pos=1,minn,sum=0; memset(visit,0,sizeof(visit)); visit[pos]=1; for(i=0;i<=n;i++) { if(i!=pos) { low[i]=map[pos][i]; //printf("%d",low[i]); } } for(i=1;i<n;i++) { minn=Maxint,pos=-1;//判断是否连通 for(j=1;j<=n;j++) { if(visit[j]==0&&minn>low[j]) { minn=low[j]; pos=j; } } if(pos == -1)return -1;//不连通 visit[pos]=1; sum+=minn; for(j=1;j<=n;j++) { if(visit[j]==0&&low[j]>map[pos][j]) { low[j]=map[pos][j]; } } } return sum; } int main() { int i,j; int m; while(scanf("%d%d",&m,&n)!=EOF&&m!=0) { //memset(map,Maxint,sizeof(map));//这种初始化方式不行 for(i=0;i<=n;i++) for(j=0;j<=n;j++) map[i][j]=Maxint; int a,b,c; for(i=1;i<=m;i++) { scanf("%d%d%d",&a,&b,&c); map[a][b]=map[b][a]=c;//无向图 } int result=prim();//printf("%d^^",Maxint); if(result!=-1) printf("%d\n",result); else printf("?\n"); } return 0; }
hdu 1863 prim算法的使用,布布扣,bubuko.com
原文:http://www.cnblogs.com/ccccnzb/p/3831732.html