POJ T1258 Agri-Net
题解:
因为给的是N*N的矩阵,所以初始化都省去了,直接上Prim模版......
代码:
#include<cstdio>
#include<algorithm>
#define maxn 105
#define INF 0x3f3f3f3f
using namespace std;
int n,sum,dis[maxn];
int maps[maxn][maxn];
bool vis[maxn];
void init(){
sum = 0;
for(int i = 1; i <= n ; i++){
dis[i] = INF;
vis[i] = false;
/*for(int j = 1; j <= i; j++)
i == j ? maps[i][j] = 0 : maps[i][j] = maps[j][i] = INF;*/
}
}
void Prim(int s){
dis[s] = 0;
for(int i = 1; i <= n ; i++){
int p = 0, minn = INF;
for(int j = 1; j <= n; j++){
if(!vis[j] && minn > dis[j]){
p = j;
minn = dis[j];
}
}
vis[p] = true;
sum += dis[p];
for(int j = 1; j <= n ; j++){
if(!vis[j] && dis[j] > maps[p][j])
dis[j] = maps[p][j];
}
}
}
int main(){
while(~scanf("%d",&n)){
init();
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n ; j++)
scanf("%d",&maps[i][j]);
Prim(1);
printf("%d\n",sum);
}
return 0;
}