题目链接:http://poj.org/problem?id=1258
题目意思很简单,给出一个n*n的矩阵代表各个农场之间的距离,求最小生成树就行;
直接prim;
#include<iostream>
using namespace std;
const int inf=1<<25;
int n;
int farm_dist[101][101];
int low_dist[101];
bool visit[101];
int prim()
{
int prim_dist=0;
int min_dist;
int pos_flag;
int i,j;
/*Initial*/
for(i=1;i<=n;i++)
{
low_dist[i]=farm_dist[1][i];
visit[i]=false;
}
visit[1]=true;
for(i=1;i<n;i++)
{
min_dist=inf;
for(j=1;j<=n;j++)
{
if(!visit[j] && min_dist>low_dist[j])
{
min_dist=low_dist[j];
pos_flag=j;
}
}
visit[pos_flag]=true;
prim_dist += min_dist;
for(j=1;j<=n;j++)
{
if(!visit[j] && low_dist[j]>farm_dist[pos_flag][j])
low_dist[j]=farm_dist[pos_flag][j];
}
}
return prim_dist;
}
int main(int i,int j)
{
while(cin>>n)
{
memset(farm_dist,0,sizeof(farm_dist));
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cin>>farm_dist[i][j];
}
cout<<prim()<<endl;
}
return 0;
}