您的位置:首页 > 其它

poj 2139 Six Degrees of Cowvin Bacon floyd算法

2014-11-15 13:11 239 查看
题意:

在n个顶点的图中求与其他n-1个点最短距离和最小的点,输出 最小化的最短距离和*100/(n-1)。

思路:

floyd求任意两点的最短距离,然后取最优。

代码:

//poj 2139
//sepNINE
#include <iostream>
using namespace std;
const int maxN=312;
int g[maxN][maxN];
int tmp[maxN];
int main()
{
	int i,j,k,n,m;
	memset(g,-1,sizeof(g));
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;++i)
		g[i][i]=1;
	while(m--){
		int x;
		scanf("%d",&x);
		for(i=1;i<=x;++i)
			scanf("%d",&tmp[i]);
		for(i=1;i<=x;++i)
			for(j=1;j<i;++j)
				g[tmp[i]][tmp[j]]=g[tmp[j]][tmp[i]]=1;
	}
	for(k=1;k<=n;++k)
		for(i=1;i<=n;++i)
			for(j=1;j<=n;++j)
				if(g[i][k]!=-1&&g[k][j]!=-1)
					if(g[i][j]==-1)
				 		g[i][j]=g[i][k]+g[k][j];
					else 
						g[i][j]=min(g[i][j],g[i][k]+g[k][j]);				
	int ans=INT_MAX;
	for(i=1;i<=n;++i){
		g[i][0]=0;
		for(j=1;j<=n;++j)
			if(i!=j)
				g[i][0]+=g[i][j];
		ans=min(ans,g[i][0]);
	}
	printf("%d",100*ans/(n-1));
	return 0;	
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: