一个小镇,要给所有的农田的通电,每对农田间的距离不同,问怎样铺设电线使电线的总长度最少。
最小生成树问题,所以用 Prim 算法,跟之前一篇有点像。
#include<iostream>
using namespace std;
int f[101];
int cost[101][101];
bool inSet[101];
int main(){
int n;
while(cin >> n){
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++)
cin >> cost[i][j];
inSet[i] = false;
}
inSet[1] = true;
int result = 0;
for(int i = 2; i <= n; i++){
int min = 1000000;
int index;
for(int j = 1; j <= n; j++ ){
if(inSet[j]){
for(int k = 1; k <= n; k++ ){
if(!inSet[k] && cost[j][k] < min){
min = cost[j][k];
index = k;
}
}
}
}
result += min;
inSet[index] = true;
}
cout << result << endl;
}
}