prim
2015-10-22 17:28
381 查看
#include <stdio.h> #include <string.h> #define MaxInt 0x3f3f3f3f int Answer; int map[102][102]; int visited[102],low[102]; int n; int prim() { int i,j,pos,min,result=0; memset(visited,0,sizeof(visited)); visited[1]=1; pos=1; //第一次给low数组赋值 for(i=1;i<=n;i++) { if(i!=pos) low[i]=map[pos][i]; } //再运行n-1次 for(i=1;i<n;i++) { //找出最小权值并记录位置 min=MaxInt; for(j=1;j<=n;j++) { if(visited[j]==0 && min>low[j]) { min=low[j]; pos=j; } } result+=min; visited[pos]=1; for(j=1;j<=n;j++) { if(visited[j]==0&&low[j]>map[pos][j]) low[j]=map[pos][j]; } } return result; } int main(void) { int T, test_case; int i,j; setbuf(stdout, NULL); scanf("%d", &T); for(test_case = 0; test_case < T; test_case++) { Answer = 0; scanf("%d", &n); for(i = 1; i <= n; i++) { for(j = 1; j <= n; j++) { scanf("%d", &map[i][j]); } } Answer = prim(); printf("Case #%d\n", test_case+1); printf("%d\n", Answer); } return 0; }