ACM乐园
Love Me,Love My Code!
C++博客
首页
新文章
新随笔
聚合
管理
posts - 53, comments - 24, trackbacks - 0
判断无向图是否有环dfs
前面有用并查集判断无向图是否有环,这次用dfs来判断是否有环。
图只有树边和反向边,如果有反向边那么就有环,否则就是树或森林。
#include
<
iostream
>
using
namespace
std;
const
int
M
=
501
;
bool
g[M][M];
bool
visit[M];
bool
flag;
int
v,e;
bool
dfs(
int
i,
int
pre)
{
visit[i]
=
true
;
for
(
int
j
=
1
;j
<=
v;j
++
)
if
(g[i][j])
{
if
(
!
visit[j])
return
dfs(j,i);
else
if
(j
!=
pre)
//
如果访问过,且不是其父节点,那么就构成环
return
false
;
}
}
int
main()
{
int
i,j;
while
(cin
>>
v
>>
e)
{
memset(g,
0
,
sizeof
(g));
while
(e
--
)
{
cin
>>
i
>>
j;
g[i][j]
=
g[j][i]
=
true
;
}
memset(visit,
0
,
sizeof
(visit));
flag
=
dfs(
1
,
0
);
if
(flag)
cout
<<
"
no\n
"
;
else
cout
<<
"
yes\n
"
;
}
return
0
;
}
posted on 2011-09-13 11:50
大大木马
阅读(7563)
评论(1)
编辑
收藏
引用
FeedBack:
#
re: 判断无向图是否有环dfs
2013-09-18 12:50 |
Parallel
There are so many bugs in your code.
i.e.
1. how can you traverse a graph with more than 1 components?
2. how can you deal with the node which has been visited and not pre? Does that means a cycle? No!
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
<
2011年9月
>
日
一
二
三
四
五
六
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔档案
(53)
2013年5月 (1)
2012年10月 (4)
2012年9月 (1)
2011年9月 (21)
2011年8月 (1)
2011年7月 (4)
2011年5月 (2)
2011年4月 (19)
文章档案
(2)
2012年9月 (1)
2012年3月 (1)
搜索
积分与排名
积分 - 63780
排名 - 351
最新评论
1. re: 会场安排问题(贪心算法)
@lizi
这个没有问题啊,只需要一个会场就安排了所有的活动
--patrick
2. re: 工作分配问题(回溯算法)
评论内容较长,点击标题查看
--45
3. re: 会场安排问题(贪心算法)
貌似有问题吧,测试数据
5
1 2
3 4
5 6
7 8
9 10
输出1
--lizi
4. re: 会场安排问题(贪心算法)
评论内容较长,点击标题查看
--张三
5. re: HDU 1698
写的很清晰,借鉴
--Qiu
阅读排行榜
1. 会场安排问题(贪心算法)(15737)
2. 工作分配问题(回溯算法)(8191)
3. 判断无向图是否有环dfs(7563)
4. HDU2602简单的01背包(3550)
5. 多处最优服务次序问题(贪心算法)(2629)
评论排行榜
1. HDU 1698(5)
2. 会场安排问题(贪心算法)(5)
3. HDU2147博弈(4)
4. HDU 1272并查集判断是否有环(3)
5. 淘宝面试:如何判断两个单向链表是否有相交,并找出交点(2)