gpt4 book ai didi

algorithm - 拓扑排序

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:41:22 24 4
gpt4 key购买 nike

考虑我教科书中给出的以下拓扑排序算法:

Input: A digraph G with n vertices
Output: A topological ordering v1,v2...vn of G, or the non-existence thereof.

S is an empty stack

for each vertex u in G do
incount(u) = indeg(u)
if incount(u) == 0 then
S.push(u)
i = 1
while S is non-empty do
u = S.pop()
set u as the i-th vertex vi
i ++
for each vertex w forming the directed edge (u,w) do
incount(w) --
if incount(w) == 0 then
S.push(w)
if S is empty then
return "G has a dicycle"

我尝试逐字逐句地实现该算法,但发现它总是提示双循环,无论该图是否是非循环的。然后,我发现最后两行不正确。当 S 为空时,紧接在它退出之前的 while 循环。因此,每次都能确保 if 条件成立。

如何修正该算法以正确检查双轮车?

编辑:

目前,我只是通过在最后检查 i 的值来绕过 S 问题:

if i != n + 1
return "G has a dicycle"

最佳答案

您的修复是正确的。如果您没有将图中的所有节点都推到 S 上,则该图至少包含一个强连通分量。换句话说,你有一个循环。

关于algorithm - 拓扑排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4156575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com