Хочу разобраться с реализацией алгоритма Эйлерова цикла

Здравствуйте. Я хочу самостоятельно написать алгоритм обхода Эйлерова пути. Но не могу понять, как реализовать алгоритм: в википедии ( http://ru.wikipedia.org/wiki/Эйлеров_цикл ) написано:

procedure find_all_cycles (v)
var массив cycles
1. пока есть цикл, проходящий через v, находим его
   добавляем все вершины найденного цикла в массив cycles (сохраняя порядок обхода)
   удаляем цикл из графа
2. идем по элементам массива cycles
   каждый элемент cycles[i] добавляем к ответу
   из каждого элемента рекурсивно вызываем себя: find_all_cycles (cycles[i])



Как понять, что есть цикл, и найти его? С чего следует начать, что прочесть?
И да, я не прошу готового кода. Я хочу понять, КАК что-то нужно реализовать.
Если кому-то в это субботнее утро будет несложно потратить свое время и пояснить мне принцип, я буду очень благодарен.

1 ответов


Неужели никто не может помочь?


К примеру в англоязычной Википедии ссылаются на некоторые документы, где более подробно разжевывается принцип действия алгоритма.

ConstructEulerTrail () {
  circuitpos = 0;
  EulerTrail ( start ); // The starting vertex
}

EulerTrail (u){
  for ( each vertex v adjacent to u) {
    DeleteEdge (u,v);
    EulerTrail (v);
  }
  circuit [ circuitpos ++] = u
}
Взято тут.