如果有限状态机、迭代函数或者链表存在环,那么是需要算法检测环是否存在。检测算法有三种:Floyd龟兔算法、Brent算法、Gosper算法。
检测环的存在性
两个人在长度为100的环形操场上跑步 , 一个人的速度是v , 另一个是2*v , 以慢的人为参考系相当于一个人静止,一个人速度v
我们让v==1,就可以得到这样一个结论,如果结构有环,则这两个人一定可以再次相遇
代码:
void solve(){
int ans = k;
int count = 0;
int k1 = k, k2 = k;
do{
k1 = next(n, k1);
k2 = next(n, k2); if(k2 > ans) ans = k2;
k2 = next(n, k2); if(k2 > ans) ans = k2;
count++; //算出循环节
}while(k1 != k2);
printf("%d\n", ans); printf("%d\n", count);
}