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());
	}
}

你可能感兴趣的:(poj,1258,poj1258)