繁体   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