HDU-1301 Jungle Roads (最小生成树-Prim)【0MS】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1301

#include<iostream>
#include<cstdio>
#include<cstring>
#define inf 0x3f3f3f3f
using namespace std;
int map[27][27],dis[27];
int n;
int Prim() {
	int minn,ans=0;
	dis[0]=0;
	for(int i=1; i<n; i++)
		dis[i]=map[0][i];
	for(int i=1; i<n; i++) {//n-1次循环!!!!(卡的我、、、、) 
		int j,k;
		minn=inf;
		for(j=0; j<n; j++) {
			if(dis[j]!=0&&dis[j]<minn) {
				minn=dis[j];
				k=j;
			}
		}
		ans+=minn;
		for(int j=0; j<n; j++)
			dis[j]=min(dis[j],map[k][j]);
	}
	return ans;
}
int main() {
	char ch,st;
	int m,num;
	while(~scanf("%d",&n)&&n) {
		memset(map,inf,sizeof(map));
		for(int i=0;i<n;i++)
			map[i][i]=0;
		int t=n-1;
		while(t--) {
			getchar();
			scanf("%c%d",&st,&m);
			for(int i=0; i<m; i++) {
				getchar();
				scanf("%c%d",&ch,&num);
				map[st-'A'][ch-'A']=map[ch-'A'][st-'A']=num;
			}
		}
		printf("%d\n",Prim());
	}
}

猜你喜欢

转载自blog.csdn.net/qq_39564498/article/details/81772094