簡體   English   中英

有向圖上的弗洛伊德循環檢測算法

[英]Floyd's cycle detection algorithm on directed graph

如何使用 Floyd 的循環檢測算法來計算有向圖中的循環長度? 我遇到的大多數鏈接都解釋了鏈表上的 Flyod 循環算法,但是如何將相同的算法用於有向圖?

當兩個指針到達時,此時指針a走了k步,指針b走了2k步,所以循環的長度除以k。 因此,可以通過將指針 a 移動到節點 x 並逐步推進指針直到它們再次相遇來找到屬於循環的第一個節點。

a = x;
while (a != b) {
a = succ(a);
b = succ(b);
}
first = a;

在此之后,循環的長度可以計算如下:

b = succ(a);
length = 1;
while (a != b) {
b = succ(b);
length++;
}

參考:“競爭性編程指南:通過競賽教科書學習和改進算法”Antti Laaksonen

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM