确定图表是否具有不使用DFS的循环

时间:2015-06-15 16:49:20

标签: algorithm graph cycle depth-first-search

我在考试中遇到了其中一个问题:

  

使用Kahn's Algorithm进行拓扑社会排序   要求图形为DAG(有向无环图)。我们怎么样   确定图表是否不包含循环而不先使用DFS / BFS?

我现在试图回答这个问题太久了,我感到很困惑。任何人都可以向我指出一种算法,该算法确定图形没有不能使用DFS的循环,还是应该向我的教师狂奔?

1 个答案:

答案 0 :(得分:4)

当且仅当在kahn算法中的某个时刻没有选择的源(并且剩余的图仍然不为空)时,有一个周期

<强>证明:
Direction1 <--

如果有周期,请将其设为v1->v2->v3->vk->v1
在算法的每一步中,v1,v2,...,vk都不是一个来源 - 通过显示你永远不会删除任何这些边来通过归纳证明它

Direction2 -->

如果在某些时候kahn的算法没有选择的源,虽然算法还没有完成,那么每个节点(在提醒图上)都有一个入局边缘。
假设没有循环,让v1->v2->..->vk成为提醒图中最长的简单路径。
但是,v1有一个传入边,所以有一些节点v0使得v0->v1->...->vk也是一个路径,因为我们假设没有周期,它也是简单的道路。
v1->..->vk

的极大性相矛盾