poj 1258
地址:http://poj.org/problem?id=1258
题意:把所有农场连起来的最小费用。
mark:最简单的最小生成树。第一次写,代码比较乱~
代码:
#include <stdio.h> #include <string.h> const int N = 110; const int MAX = 100010; int vis[N],dis[N]; int a[N][N]; int min(int a, int b) {return a < b ? a : b;} int main() { int n,ans,min1,f,sum; int i,j,k; while(~scanf("%d", &n)) { for(i = 0; i < n; i++) { dis[i] = MAX; for(j = 0; j < n; j++) scanf("%d", &a[i][j]); } memset(vis, 0, sizeof(vis)); ans = n; sum = 0; vis[0] = 1; f = 0; while(--ans) { i = f; min1 = MAX; for(j = 0; j < n; j++) { if(vis[j]) continue; dis[j] = min(dis[j], a[i][j]); if(min1 > dis[j]) { min1 = dis[j]; f = j; } } vis[f] = 1; sum += min1; } printf("%d\n", sum); } return 0; }