1869六度分离

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1869

解题思路:本题为简单最短路,只需要求出两两间的距离,如果存在一个两两间距离大于7的点的话则输出No如果两两间的距离都小于或等于7则输出Yes

#include<stdio.h>
#define INF (1<<20)
#define maxn 105
int map[maxn][maxn],n,m;
void floyd()
{
	int i,j,k;
	for(k = 0; k < n; k++)
		for(i = 0; i < n; i++)
			for(j = 0; j < n; j++)
				if(map[i][j] > map[i][k] + map[k][j])
					map[i][j] = map[i][k] + map[k][j];
}
int main()
{
	int i,j,a,b;
	while(scanf("%d%d",&n,&m)!= EOF)
	{
		for(i = 0; i < n; i++)
			for(j = 0; j < n; j++)
				map[i][j] = (i == j ? 0 : INF);
		while(m--)
		{
			scanf("%d%d",&a,&b);
			map[a][b] = map[b][a] = 1;
		}
		floyd();
		int flg = 1;

		for(i = 0; i < n && flg; i++)
		{
			for(j = 0; j < n && flg; j++)
				if(map[i][j] > 7)
					flg = 0;
		}
		if(flg)
			printf("Yes\n");
		else
			printf("No\n");
	}
	return 0;
}


 

posted @ 2012-09-05 11:14  一生挚爱  阅读(195)  评论(0编辑  收藏  举报