六度分离 HDU1869

一开始想到floyd

做的时候出现了一点问题 :如果两者有关系 则定义为1;

  但是数组是对称的  所以要设置成  m1[a][b]=m1[b][a]=1;

#include<bits/stdc++.h>
using namespace std;

int m1[300][300];
int main()
{

    int n,m;
    while(scanf("%d%d",&n,&m)==2)
    {
            memset(m1,10,sizeof(m1));
            for(int i=0;i<n;i++)m1[i][i]=0;
        for(int i=1;i<=m;i++)
        {  int a,b;
           scanf("%d %d",&a,&b);
            m1[a][b]=m1[b][a]=1;

        }



     //    for(int i=0;i<n;i++)
    //    {for(int j=0;j<n;j++)
     //      printf("%d ",m1[i][j]);
     //      printf("
");}


        for(int k=0;k<n;k++)
            for(int i=0;i<n;i++)
              for(int j=0;j<n;j++)
        {
            if(m1[i][j]>m1[i][k]+m1[k][j])

            m1[i][j]=m1[i][k]+m1[k][j];

        }
     //   for(int i=0;i<n;i++)
     //   {for(int j=0;j<n;j++)
     //      printf("%d ",m1[i][j]);
     //      printf("
");}

           int ok=1;
          for(int i=0;i<n;i++)
          for(int j=0;j<n;j++)
          {

              if(m1[i][j]>7&&m1[j][i]>7){ok=0;break;}

          }

          if(ok)printf("Yes
");
          else printf("No
");


    }





}
View Code
原文地址:https://www.cnblogs.com/bxd123/p/10322898.html