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; }