Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 46811 | Accepted: 19335 |
Description
Input
Output
Sample Input
4 0 4 9 21 4 0 8 17 9 8 0 16 21 17 16 0
Sample Output
28
题意:输入n个数,接着是n个数之间距离形成的n*n的矩阵,求最小生成树。
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <queue> 5 #include <algorithm> 6 7 using namespace std; 8 const int MAX = 100 + 5; 9 const int INF = 10000000; 10 int g[MAX][MAX],n,dist[MAX],vis[MAX]; 11 int main() 12 { 13 while(scanf("%d", &n) != EOF) 14 { 15 for(int i = 1; i <= n; i++) 16 { 17 for(int j = 1; j <= n; j++) 18 { 19 scanf("%d", &g[i][j]); 20 } 21 } 22 memset(dist,0,sizeof(dist)); 23 memset(vis,false,sizeof(vis)); 24 for(int i = 1; i <= n; i++) 25 dist[i] = g[1][i]; 26 27 vis[1] = true; 28 int sum = 0; 29 for(int i = 1; i < n; i++) 30 { 31 int pos,minn = INF; 32 for(int j = 1; j <= n; j++) 33 { 34 if(vis[j] == false) 35 { 36 if(dist[j] < minn) 37 { 38 pos = j; 39 minn = dist[j]; 40 } 41 } 42 } 43 vis[pos] = true; 44 sum += minn; 45 for(int j = 1; j <= n; j++) 46 dist[j] = min(dist[j],g[pos][j]); 47 } 48 printf("%d\n",sum); 49 } 50 return 0; 51 }
原文:http://www.cnblogs.com/zhaopAC/p/4978030.html