您的位置:首页 > 其它

POJ 1258 Agri-Net 最小生成树 Prim算法

2014-08-13 11:03 274 查看
题目大意:给定一个矩阵graph[i][j] 表示<i,j>边上的权值,求出该最小生成树的总权值。

分析:水题,裸Prim就可以过掉了。

代码如下:

/*
Memory  POJ 1258
Orzmyk
*/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 1000000
using namespace std;
int graph[120][120],n;
int prim()
{
int s=1,pos,d[120],res=0,ans=0,m=1;//m=1,s=1;初始化
bool v[120];
memset(v,false,sizeof(v));//数组初始化
memset(d,0,sizeof(d));
v[s]=true;
for(int i=1;i<=n;i++)
d[i]=MAXN;//pre
while(true)
{
if(m==n)
break;
res=MAXN;
for(int i=2;i<=n;i++)
{
if(!v[i]&&d[i]>graph[s][i])
d[i]=graph[s][i];
if(!v[i]&&res>d[i])
{
res=d[i];
pos=i;
}
}
s=pos;
v[s]=true;
ans+=res;
m++;
}
return ans;
}
int main()
{
while(cin>>n)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>graph[i][j];
cout<<prim()<<endl;
}
//while(1);
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: