题目大意: 有n个农场, 要布设光纤使每个农场都能通信, 求安装的光纤最短距离。
题目分析: 最小生成树裸题, 稠密图用Prim算法
代码:
using namespace std; const int INF = 1 << 31 -1; int n; int cost[105][105]; int mincost[105]; bool used[105]; int Prim() { int ans = 0; for(int i=0; i<n; ++i) { mincost[i] = INF; used[i] = false; } mincost[0] = 0; while(1) { int v = -1; for(int i=0; i<n; ++i) if(!used[i] && (v == -1 || mincost[i] < mincost[v])) v = i; if(v == -1) break; ans += mincost[v]; used[v] = true; for(int i=0; i<n; ++i) mincost[i] = min(mincost[i], cost[v][i]); } return ans; } int main() { while(cin >> n) { for(int i=0; i<n; ++i) for(int j=0; j<n; ++j) scanf("%d", &cost[i][j]); cout << Prim() << endl; } return 0; }