Agri-Net--POJ 1258
1、题目类型:图论、最小生成树、Prim算法。
2、解题思路:Prim算法求解最小生成树。
3、注意事项:Prim算法的简单应用。
4、实现方法:
#include<iostream>
#include<algorithm>
using namespace std;
#define Max 100000
int n,map[101][101];
bool vis[101];
int Prim()
{
int i,j,pos,ans=0,dis[101];
memset(vis,0,sizeof(vis));
for(i=0;i<n;i++)
dis[i]=map[0][i];
vis[0]=1;
for(i=0;i<n-1;i++)
{
pos=min_element(dis+1,dis+n)-dis;
vis[pos]=1;
ans+=dis[pos];
dis[pos]=Max;
for(j=0;j<n;j++)
if(!vis[j] && dis[j]>map[pos][j])
dis[j]=map[pos][j];
}
return ans;
}
int main()
{
int i,j,ans;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&map[i][j]);
ans=Prim();
printf("%d\n",ans);
}
return 1;
}