Poj 1258 Agri-Net

题目大意:给定一个N村庄和一个N*N的邻接矩阵表示每两个村庄间的距离,求将这N个点联通所需的最小电线长度 。

思路:Prim算法求最小生成树,直接上模板。

#include <stdio.h>
int data[120][120];
int n;
#define maxn 90000000
int prim() {
	int ctr,po,mi,sum;
	int i,j,k;
	ctr=0;
	sum=0;
	while ( ctr<n-1 ) {
		mi=maxn;
		for ( i=1;i<n;i++ ) {
			if (data[0][i]<mi) {
				po=i;
				mi=data[0][i];
			}
		}
		sum=sum+mi;
		ctr++;
		for ( i=1;i<n;i++ ) {
			if (data[po][i]<data[0][i])
				data[0][i]=data[po][i];
			if (data[i][po]<data[i][0]) 
				data[i][0]=data[i][po];
			data[i][po]=maxn;
			data[po][i]=maxn;
		}
		data[0][po]=maxn;
	}
	return sum;
}
int main()
{
	int i,j,k;

	while ( scanf("%d",&n)!=EOF ) {
		for ( i=0;i<n;i++ ) {
			data[i][i]=90000000;
			for ( j=0;j<n;j++ ) {
				scanf("%d",&k);
				if ( i!=j )
					data[i][j]=k;
			}
		}
		k=prim();
		printf("%d\n",k);
	}
	return 0;
}


你可能感兴趣的:(Poj 1258 Agri-Net)