Хочу разобраться с реализацией алгоритма Эйлерова цикла
Здравствуйте. Я хочу самостоятельно написать алгоритм обхода Эйлерова пути. Но не могу понять, как реализовать алгоритм: в википедии ( http://ru.wikipedia.org/wiki/Эйлеров_цикл ) написано:
Как понять, что есть цикл, и найти его? С чего следует начать, что прочесть?
И да, я не прошу готового кода. Я хочу понять, КАК что-то нужно реализовать.
Если кому-то в это субботнее утро будет несложно потратить свое время и пояснить мне принцип, я буду очень благодарен.
procedure find_all_cycles (v)
var массив cycles
1. пока есть цикл, проходящий через v, находим его
добавляем все вершины найденного цикла в массив cycles (сохраняя порядок обхода)
удаляем цикл из графа
2. идем по элементам массива cycles
каждый элемент cycles[i] добавляем к ответу
из каждого элемента рекурсивно вызываем себя: find_all_cycles (cycles[i])
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
}
Взято тут.
circuitpos = 0;
EulerTrail ( start ); // The starting vertex
}
EulerTrail (u){
for ( each vertex v adjacent to u) {
DeleteEdge (u,v);
EulerTrail (v);
}
circuit [ circuitpos ++] = u
}
Взято тут.