/*
简单的最小生成树题目,直接用邻接矩阵接收值,然后用最小生成树的算法来求解,即可;
*/
#include <iostream>
#include <cstring>
using namespace std;
const int INF = 1<<29;
const int MAX = 102;
int map[MAX][MAX];
int N;
int visit[101];
int dis[101];
//prim 算法
void prim(int start){
memset(visit, 0, sizeof(visit));
int min, temp;
for(int i=1; i<=N; ++i){
dis[i] = map[start][i];
}
visit[start] = 1;
for(int i=1; i<N; ++i){
min = INF;
for(int j=1; j<=N; ++j){
if(!(visit[j]) && min > dis[j]){
min = dis[j];
temp = j;
}
}
visit[temp] = 1;
for(int j=1; j<=N; ++j){
if(!(visit[j]) && dis[j] > map[temp][j])
dis[j] = map[temp][j];
}
}
int sum = 0;
for(int i=1; i<=N; ++i){
sum += dis[i];
}
printf("%d\n",sum);
}
int main(){
while(scanf("%d",&N) != EOF)
{
for(int i=1; i<=N; ++i){
for(int j=1; j<=N; ++j){
cin>>map[i][j];
}
}
//show();
prim(1);
}
return 0;
}
POJ 1258(prim算法)
最新推荐文章于 2022-03-09 16:55:41 发布