现在的位置: 首页 > 综合 > 正文

HDOJ 1869 六度分离 两两之间最短距离的最大值

2018年05月25日 ⁄ 综合 ⁄ 共 756字 ⁄ 字号 评论关闭

        这道题的背景是以著名的六度定理为依托,现在的SNS网站的理论基础。也就是说两个陌生人之间的最多不会由超过6个熟人相连。

        想到这就可以用floyd算法求解了。若存在一对顶点的距离大于7,那么这个定理也就不成立。注意,两个人之间不超过6个人,也就是说两个人最多由7条边相连,而不是6条边。

       

#include<iostream>
#include<stdio.h>
using namespace std;

const int Max = 100;
int g[Max][Max];
const int Infinity = 3000000;
int num;

int main()
{
	int m, h, t;
	bool flag;
	while(scanf("%d%d", &num, &m) != EOF)
	{
		for(int i=0; i<Max; i++)
			for(int j=0; j<Max; j++) g[i][j] = Infinity;
		for(int i=0; i<Max; i++) g[i][i] = 0;
		
		for(int i=0; i<m; i++)
		{
			scanf("%d%d", &h, &t);
			g[h][t] = g[t][h] = 1;
		}
		
		for(int i=0; i<num; i++)
			for(int j=0; j<num; j++)
				for(int k=0; k<num; k++)
					if(g[j][k] > g[j][i] + g[i][k]) g[j][k] = g[j][i] + g[i][k];
		
		flag = true;
		for(int i=0; i<num; i++)
			for(int j=0; j<num; j++) 
				if(g[i][j] > 7)
				{
					flag = false;
					break;
				}
		if(flag) printf("Yes\n");
		else printf("No\n");
	}
	system("pause");
	return 0;
}


抱歉!评论已关闭.