hdu 1869 六度分离

来源:互联网 发布:淘宝网儿童棉服 编辑:程序博客网 时间:2024/04/30 12:58

点击打开链接hdu 1869


思路:最短路+floyd

分析:
1 题目是要求所有的数据能否满足“六度分离”,那么我们就想到所有点之间的最短距离。
2 应用floyd,如果两点之间有联系那么距离标记为1,那么最后只要判断是不是每两个人之间的距离是不是都不大于7(这里为什么是7不是6自己画图).

代码:

#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace std;#define MAXN 110#define INF 0xFFFFFFFint n , m;int dis[MAXN][MAXN];void init(){   for(int i = 0 ; i < n ; i++){      for(int j = 0 ; j < n ; j++)         dis[i][j] = INF;      dis[i][i] = 0;   }}int min(int a , int b){    return a < b ? a : b;}void floyd(){   for(int k = 0 ; k < n ; k++){      for(int i = 0 ; i < n ; i++){         for(int j = 0 ; j < n ; j++)            dis[i][j] = min(dis[i][j] , dis[i][k]+dis[k][j]);      }   }}int main(){  int a , b , flag;  while(scanf("%d%d" , &n , &m) != EOF){      init();      for(int i = 0 ; i < m ; i++){         scanf("%d%d" , &a , &b);         dis[a][b] = dis[b][a] = 1;      }      floyd();      flag = 1;      for(int i = 0 ; i < n ; i++){         for(int j = 0 ; j < n ; j++){            if(dis[i][j] > 7){              flag = 0;              break;            }           }         if(!flag)            break;      }      if(flag)        printf("Yes\n");      else        printf("No\n");  }  return 0;}


原创粉丝点击