HDU_3342_Floy判断环

HDU_3342_Floy判断环

//给定有向路径,判断是否成环。另所有边为1,如果正反向边都有权重,则成环。
#include < iostream >
using   namespace  std;
#define  INF 999999
int  D[ 101 ][ 101 ];
bool  floyd( int  n)
{
  
int k,i,j;
  
for(k = 0; k < n; k++)
      
for(i = 0; i < n; i++)
          
for(j = 0; j < n; j++)
          
{
             
if(D[i][k]!=INF && D[k][j]!=INF)
             
{
                
if((D[i][k] + D[k][j]) < D[i][j])
                    D[i][j] 
= D[i][k] + D[k][j];
                
if(D[j][i] != INF && D[j][i]!= 0)
                    
return false;

             }

          }

  
return true;
}

int  main()
{
  
int n,m,i,j,a,b;
  
while(scanf("%d %d",&n,&m)!=EOF && n)
  
{
    
for(i = 0; i < n; i++)
    
{
       D[i][i] 
= 0;
       
for(j = i+1;j < n;j++)
           D[i][j] 
= D[j][i] = INF;
    }

    
for(i = 0; i < m; i++)
    
{
       scanf(
"%d %d",&a,&b);
       D[a][b]
=1;
    }

    
if(floyd(n))
        puts(
"YES");
    
else
        puts(
"NO");
  }

}


你可能感兴趣的:(HDU_3342_Floy判断环)