[英]Detecting a cycle in a directed graph
好吧,您可能對有向圖中的后沿定義和無向圖中的后沿定義感到困惑。 是的,它們是不同的。
在無向圖中,后邊緣是從當前頂點到已訪問的頂點的邊緣。 (如您提到的鏈接中的OP)。
在有向圖中,后邊緣的定義不同。 有向圖的后邊緣是從當前頂點到GREY頂點的邊緣(此頂點的DFS已開始但尚未完成),這意味着它仍在遞歸堆棧中。
因此,如果按照有向圖中的方式定義后沿,則可以,它足以檢測周期。
但是,如果您將后緣的定義定義為無向圖中,那么您還需要確保v
在遞歸堆棧中以檢測循環。
例:
考慮DFS訪問順序為A -> B -> C
在此示例中,邊<A,C>
是帶下划線的圖中的后邊(因為C已被訪問)。
但這不是該有向圖的后邊緣-C已被訪問但不在遞歸堆棧中,這意味着它不是循環。
當它是交叉邊緣而不是后邊緣時,需要進行第二次測試。 交叉邊緣是指從一個頂點到一個已經訪問過的頂點的一個邊緣,與位置無關。 后邊緣指的是指向起始頂點的祖先的一條邊,該頂點仍在遞歸堆棧中。 就如何提出問題而言,OP將后邊緣稱為指向另一個已經訪問過的邊緣的邊緣,但是更准確的解釋是交叉邊緣。 知道它是后邊緣就足夠了,因為這意味着第二步。 當第一個是交叉邊緣時,需要執行這些步驟,因為第二個步驟證明了交叉邊緣是后邊緣。 在有向圖中,交叉邊緣並不總是意味着發生循環。 這是一個例子:
vertices a,b,c,d
a->b
a->c
b->d
d->c
根據處理順序,可以將d->c
視為交叉邊緣,因此需要步驟2來檢測循環。 不幸的是,后邊緣和交叉邊緣經常混合在一起,從而引起混亂。 這是指向兩者之間差異的另一描述的鏈接,即深度優先搜索 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.