题目链接: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;
}
本文详细解析了 POJ 1258 题目,并通过 Prim 算法实现了一个 n*n 矩阵中寻找最小生成树的过程。该算法首先初始化矩阵并进行 Prim 迭代过程,最终输出最小生成树的总边权。
324

被折叠的 条评论
为什么被折叠?



