floyd判环算法(龟兔赛跑算法)

Posted PECHPO

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了floyd判环算法(龟兔赛跑算法)相关的知识,希望对你有一定的参考价值。

floyd判环算法(龟兔赛跑算法)

注意,这个算法是用来判断一条链+一条环的图,环的长度或者环与链的交界处的,所以此floyd非彼floyd(虽然都是一个人想出来的)。

示例图

(图不是我的)

如果只要求环的长度的话,只要让h和t相遇,然后再让h跑一圈,同时计算出步数就行了。

如果要算出链和环的交界点呢?首先,指针h和t同时从S出发,速度一个为2,一个为1(不要在意细节)。当t走到链和环的交界点时,在右边的ht的距离等于st的距离。设st的距离为x,在左边的ht距离为y,那么环的长度就是x+y。现在让h和t继续走,直到m相交,那么显然右边的tm的距离就是y。由于环的长度是x+y,所以左边的tm长度就为x。现在让两个等速的点一个在s,一个在m,同时走,就会在t碰头,于是交界处的点就求出来了。

由于codevs又双叒叕上不去了,所以暂时没有题目。

以上是关于floyd判环算法(龟兔赛跑算法)的主要内容,如果未能解决你的问题,请参考以下文章

Floyd判圈算法

Floyd判圈算法 Floyd Cycle Detection Algorithm

Floyd判圈算法(判断链表是否含环)

龟兔指针法

龟兔指针法

HDU 1317 XYZZY(floyd+bellman_ford判环)