Допустим, у нас есть полностью связный ориентированный граф G
. Вершины [a,b,c]
. Между каждой вершиной есть ребра в обоих направлениях.
Учитывая начальную вершину a
, я хотел бы пройти по графику во всех направлениях и сохранить путь, только когда я попал в вершину, которая уже находится в пути.
Итак, функция full_paths(a,G)
должна вернуть:
- [{a,b}, {b,c}, {c,d}]
- [{a,b}, {b,d}, {d,c}]
- [{a,c}, {c,b}, {b,d}]
- [{a,c}, {c,d}, {d,b}]
- [{a,d}, {d,c}, {c,b}]
- [{a,d}, {d,b}, {b,c}]
Мне не нужны «неполные» результаты, такие как [{a,b}]
или [{a,b}, {b,c}]
, потому что они уже содержатся в первом результате.
Есть ли другой способ сделать это, кроме генерации набора мощности G и фильтрации результатов определенного размера?
Как я могу рассчитать это?
Редактировать : Как отметил Итан, это можно решить с помощью метода поиска в глубину, но, к сожалению, я не понимаю, как изменить его, заставив хранить путь до возврата (я использую Ruby Gratr для реализации моего алгоритма)