我在考试中遇到了其中一个问题:
使用Kahn's Algorithm进行拓扑社会排序 要求图形为DAG(有向无环图)。我们怎么样 确定图表是否不包含循环而不先使用DFS / BFS?
我现在试图回答这个问题太久了,我感到很困惑。任何人都可以向我指出一种算法,该算法确定图形没有不能使用DFS的循环,还是应该向我的教师狂奔?
答案 0 :(得分:4)
当且仅当在kahn算法中的某个时刻没有选择的源(并且剩余的图仍然不为空)时,有一个周期
<强>证明:强>
Direction1 <--
:
如果有周期,请将其设为v1->v2->v3->vk->v1
。
在算法的每一步中,v1,v2,...,vk
都不是一个来源 - 通过显示你永远不会删除任何这些边来通过归纳证明它
Direction2 -->
:
如果在某些时候kahn的算法没有选择的源,虽然算法还没有完成,那么每个节点(在提醒图上)都有一个入局边缘。
假设没有循环,让v1->v2->..->vk
成为提醒图中最长的简单路径。
但是,v1
有一个传入边,所以有一些节点v0
使得v0->v1->...->vk
也是一个路径,因为我们假设没有周期,它也是简单的道路。
与v1->..->vk