Найти - Пользователи
Полная версия: Дерево путей в графе с циклами - итеративно
Начало » Центр помощи » Дерево путей в графе с циклами - итеративно
1 2
alekscooper
Уважаемые товарищи, всем привет!

Имеется задача:

1. Есть граф, направленный, взвешенный, с циклами (но без зацикливания вершин на самих себя).
2. Нужно итеративно построить дерево всех возможных самых глубоких путей из некоторой данной вершины графа.

Что есть и что я знаю:

1. Есть граф, сохранённый в виде списка вершин и списка рёбер с весами.

2. Я в курсе, что есть стек, дерево, рекурсия и т. п.

3. Я понимаю, что мы выходим из начальный вершины, берём её детей, затем её детей и т. п. и на каждом этапе смотрим, чтобы каждая вершина была по одному разу, иначе попадём в петлю.

В чём проблема: не могу ухватить суть, а именно: как организовать условие, по которому мы запускаем цикл, как хранить пройденные вершины для каждого пути и как организовать возврат, когда мы дошли до листочков (leaves) дерева графа, детей больше ни у кого нет и нам нужно обратно.

ПРИМЕЧАНИЕ: 1) я в курсе, что, наверное, есть и другие, более эффективные способы - нужно сделать именно ТАК. 2) я не прошу готовый скрипт - мне нужен алгоритмический пинок

Заранее всем спасибо!
kamisama
Тут надо просто почаще рекурсией обмазываться. Потом проще будет.
Все пути примерно так ищутся (могу ошибиться)
def paths(node, acc=[]):
    if node in acc:
        return [acc]
    if children(node):
        return [sum(paths(child, acc + [node]), []) for child in children(node)]
    return [acc + [node]]
alekscooper
Про рекурсию знаю, страха перед ней нет, просто лёгких путей мы не ищем
terabayt
alekscooper
1. Есть граф, сохранённый в виде списка вершин и списка рёбер с весами.
нужен пример списка
alekscooper
мне нужен алгоритмический пинок
ну если вершин не много то рекурсией будет легче всего
kamisama
alekscooper
Про рекурсию знаю, страха перед ней нет, просто лёгких путей мы не ищем
Так тебе без рекурсии надо чтоли? Непонятно что имелось в виду под словом “итеративно”
alekscooper
kamisama
Так тебе без рекурсии надо чтоли? Непонятно что имелось в виду под словом “итеративно”

Да, без рекурсии
alekscooper
Вопрос отпал, стоило лишь включить мозг на 100% ТЕМА RESOLVED
terabayt
alekscooper
стоило лишь включить мозг на 100%
смотрели фильм “Люси”? ))
alekscooper
terabayt
мотрели фильм “Люси”? ))
Впервые слышу Люси знаю только песню про собачку, исполняемую писклявым газмановским отпрыском
terabayt
alekscooper
Впервые слышу
ну вы посмотрите, очень интересный фильм
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB