Алгоритм поиска цикла Флойда

Я пытаюсь найти этот алгоритм на C ++ в .NET, но не могу, я нашел этот:

// Best solution
function boolean hasLoop(Node startNode){
  Node slowNode = Node fastNode1 = Node fastNode2 = startNode;
  while (slowNode && fastNode1 = fastNode2.next() && fastNode2 = fastNode1.next()){
    if (slowNode == fastNode1 || slowNode == fastNode2) return true;
    slowNode = slowNode.next();
  }
  return false;
}

, но кажется неправильным, или я ошибаюсь? Как я могу доказать, что мой заяц в конце концов встретит черепаху? Заранее спасибо за любые объяснения, как именно это работает, и доказательство

EDITED

По поводу этого решения я обнаружил, что в обычном алгоритме они используют только один быстрый итератор, а здесь они используют два, почему?

5
задан nhahtdh 6 May 2013 в 21:42
поделиться