标签:
Input
The input includes several cases. For each case, the first line contains the number of farms, N (3 <= N <= 100). The following lines contain the N x N conectivity matrix, where each element shows the distance from on farm to another. Logically, they are N lines of N space-separated integers. Physically, they are limited in length to 80 characters, so some lines continue onto others. Of course, the diagonal will be 0, since the distance from farm i to itself is not interesting for this problem.
Output
For each case, output a single integer length that is the sum of the minimum length of fiber required to connect the entire set of farms.
Sample Input
421 17 16 0
28
题目大意:给你一个N个点的矩阵图,求所有点相连的最小生成树。
思路:直接裸的Prim算法。
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; int G[110][110],vis[110],low[110]; void Prim(int N) { memset(vis,0,sizeof(vis)); int ans = 0; int pos = 1; vis[1] = 1; for(int i = 1; i <= N; i++) if(i != pos) low[i] = G[pos][i]; for(int i = 1; i < N; i++) { int Min = 0xffffff0; for(int j = 1; j <= N; j++) { if(!vis[j] && Min > low[j]) { Min = low[j]; pos = j; } } ans += Min; vis[pos] = 1; for(int j = 1; j <= N; j++) { if(!vis[j] && low[j] > G[pos][j]) low[j] = G[pos][j]; } } cout << ans << endl; } int main() { int N; while(cin >> N) { for(int i = 1; i <= N; i++) { for(int j = 1; j <= N; j++) { cin >> G[i][j]; } } Prim(N); } }
标签:
原文地址:http://blog.csdn.net/lianai911/article/details/42124897