博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hdu 3342 Legal or Not
阅读量:5159 次
发布时间:2019-06-13

本文共 1469 字,大约阅读时间需要 4 分钟。

大意:判断是否有向图是否有环。

 

思路1:通过Floyd传递闭包来确定是否有向环。(350MS)

思路2:通过拓扑排序判断是否存在有向环。(109MS)

CODE1:

 

 

#include <iostream>
#include <cstdio>
#include <cstdlib>
using 
namespace std;
const 
int SIZE = 
510;
int G[SIZE][SIZE];
int n, m;
int FLoyd()
{
    
for(
int k = 
0; k < n; k++)
    
for(
int i = 
0; i < n; i++)
        
for(
int j = 
0; j < n; j++)    G[i][j] = G[i][j] ||(G[i][k] && G[k][j]);
            
//
if(G[i][k] && G[k][j]) G[i][j] = 1;
    
for(
int i = 
0; i < n; i++)
        
if(G[i][i] == 
1
return 
0;           
//存在环
    
return 
1;
}
void init()
{
    memset(G, 
0
sizeof(G));
}
int main()
{
    
while(~scanf(
"
%d%d
", &n, &m), n, m)
    {
        init();
        
while(m--)
        {
            
int u, v;
            scanf(
"
%d%d
", &u, &v);
            G[u][v] = 
1;
        }
        
if(FLoyd())
        {
            printf(
"
YES\n
");
        }
        
else printf(
"
NO\n
");
    }
    
return 
0;
}

 

CODE2:

 

#include <iostream>
#include <cstdio>
#include <cstdlib>
using 
namespace std;
const 
int SIZE = 
510;
int G[SIZE][SIZE];
int topo[SIZE], ind[SIZE];
int n, m;
int toposort()
{
    
for(
int i = 
0; i < n; i++)
    {
        
int u;
        
for(u = 
0;  u < n; u++)
            
if(!ind[u]) 
break;
        
if(u >= n) 
return 
0;
        topo[i] = u; ind[u]--;
        
for(
int v = 
0; v < n; v++)
             
if(G[u][v]) ind[v]--;
    }
    
return 
1;
}
void init()
{
    memset(ind, 
0
sizeof(ind));
    memset(topo, 
0
sizeof(topo));
    memset(G, 
0
sizeof(G));
}
int main()
{
    
while(~scanf(
"
%d%d
", &n, &m), n, m)
    {
        init();
        
while(m--)
        {
            
int u, v;
            scanf(
"
%d%d
", &u, &v);
            
if(!G[u][v])
            {
                G[u][v] = 
1;
                ind[v]++;
            }
        }
        
if(toposort())
        {
            printf(
"
YES\n
");
        }
        
else printf(
"
NO\n
");
    }
    
return 
0;
}

 

转载于:https://www.cnblogs.com/g0feng/archive/2012/09/18/2690268.html

你可能感兴趣的文章
js深度克隆对象、数组
查看>>
socket阻塞与非阻塞,同步与异步
查看>>
团队工作第二天
查看>>
System类
查看>>
tableView
查看>>
Happy Great BG-卡精度
查看>>
Xamarin Visual Studio不识别JDK路径
查看>>
菜鸟“抄程序”之道
查看>>
Ubuntu下关闭防火墙
查看>>
TCP/IP 邮件的原理
查看>>
原型设计工具
查看>>
windows下的C++ socket服务器(4)
查看>>
css3 2d转换3d转换以及动画的知识点汇总
查看>>
【Java】使用Eclipse进行远程调试,Linux下开启远程调试
查看>>
对Vue为什么不支持IE8的解释之一
查看>>
计算机改名导致数据库链接的诡异问题
查看>>
Java8内存模型—永久代(PermGen)和元空间(Metaspace)(转)
查看>>
ObjectiveC基础教程(第2版)
查看>>
centos 引导盘
查看>>
Notes of Daily Scrum Meeting(12.8)
查看>>