0
点赞
收藏
分享

微信扫一扫

poj1258Agri-Net 最小生成树prim


看了一上午才看懂~~渣渣学习中

#include <stdio.h>
#include <string.h>
#define inf 0x3fffffff
int visit[101],map[101][101],minpos[101],n;
int prim()
{
int pos,t=0,ant=0,p,min;
visit[0]=1;
minpos[t++]=0;
while(t<n)
{
min=inf;
for(int i=0;i<t;i++)
{
p=minpos[i];
for(int j=0;j<n;j++)
{
if(min>map[p][j]&&!visit[j])
min=map[p][j],pos=j;
}
}
ant+=min;
minpos[t++]=pos;
visit[pos]=1;
}
return ant;
}
int main()
{
int x;
while(scanf("%d",&n)!=EOF)
{
memset(visit,0,sizeof(visit));
memset(map,inf,sizeof(map));//map初始为最大值
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
scanf("%d",&x);
map[i][j]=map[j][i]=x;
}
printf("%d\n",prim());
}
}


举报

相关推荐

0 条评论