#include <iostream>
using namespace std;
#define INF 100000000
int edge[101][101], dis[101],n;
bool check[101];
int Prim()
{
int i,j,k,min,sum = 0;
memset(check,0,sizeof(check));
for ( i = 0; i < n; i++ )
dis[i] = INF;
dis[0] = 0;
for ( i = 0; i < n; i++ )
{
min = INF;
for ( j = 0; j < n; j++ )
if ( !check[j] && dis[j] < min )
{
k = j;
min = dis[j];
}
sum += min;
check[k] = 1;
for ( j = 0; j < n; j++ )
if ( !check[j] && edge[k][j] < dis[j] )
dis[j] = edge[k][j];
}
return sum;
}
int main()
{
while ( cin >> n )
{
memset(edge,0,sizeof(edge));
for ( int i = 0; i < n; i++ )
for ( int j = 0; j < n; j++ )
cin >> edge[i][j];
cout << Prim() << endl;
}
return 0;
}
poj1258
最新推荐文章于 2021-07-02 15:03:12 发布