Развернуть рекурсивный алгоритм в обычный цикл. Путь Эйлера
Есть некий направленный мультиграф. Задаётся он при помощи списка рёбер. Минимально каждое ребро должно хранить информацию "Откуда" и "Куда".
Нужно найти все комбинации при которых захватываются все рёбра графа (Как я понял это алгоритм нахождения пути Эйлера)
Я написал алгоритм в виде рекурсии ( логика такова что я разворачиваю свой граф в дерево и простым DFS прохожусь по ветвям, если дошёл до конца - добавляю в ответ +1 ). Написано на C#, однако, думаю, смогу понять ответ и на других яп.
Задача: Развернуть рекурсию в обычный цикл.
Вот мой код:
public class Movement
{
public int From = 0;
public int To = 0;
public Movement(int from, int to)
{
this.From = from;
this.To = to;
}
public int FindMovements(List<Movement> container)
{
int result = 0;
bool existFlag = false; // Флаг, говорящий, остались ли вообще перемещения
int temp = container.IndexOf(this);
container.Remove(this);
for (int i = 0; i < container.Count; i++)
{
existFlag = true;
if (container[i].From == this.To)
result += container[i].FindMovements(container);
}
container.Insert(temp, this);
return existFlag ? result : 1;
}
}