POJ2395 最小生成树prim算法

#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=2010,maxm=10010,INF=1000001000;
int a[maxn][maxn],d[maxn],p[maxn];
int main(){
	int i,j,k,m,n,s;
	int x,y,w,ans=0,min;
	cin>>n>>m;
	for(i=1;i<=n;i++)d[i]=INF;
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
				a[i][j]=INF;
	for(i=1;i<=m;i++){
		scanf("%d%d%d",&x,&y,&w);
		if(a[x][y]>w)a[x][y]=a[y][x]=w;
	}
	d[1]=0;
	for(i=1;i<=n;i++){
		min=INF;
		for(j=1;j<=n;j++)
			if(!p[j] && d[j]<min){
				min=d[j];
				k=j;
			}
		p[k]=1;		
		ans=ans>d[k]?ans:d[k];
		for(j=1;j<=n;j++)
			if(a[k][j] && d[j]>a[k][j])
				d[j]=a[k][j];
	}
	cout<<ans<<endl;
	return 0;
}

你可能感兴趣的:(最小生成树,C语言,poj,图论,Prim)