все пути между двумя узлами на основе ребер - PullRequest
0 голосов
/ 07 апреля 2011

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

Я нашел это в качестве решения, но этот подход слишком медленный, учитывая размер моего фактическогограф.Я хотел бы знать, какие оптимизации можно сделать, чтобы улучшить это.Я изменил код, указанный в ссылке, чтобы использовать deque () Это тоже не слишком помогает g=nx.MultiGraph() g.add_edge(1,1,key='a') g.add_edge(1,2,key='b') g.add_edge(2,4,key='c') g.add_edge(2,4,key='d') g.add_edge(3,2,key='e') g.add_edge(3,3,key='f') g.add_edge(1,3,key='g') g.add_edge(1,5,key='h') g.add_edge(5,5,key='i') Ответ для all_path (1,4): </p> <pre> Path: 0 --> [(1, 1, 'a'), (1, 2, 'b'), (2, 4, 'c')] Path: 1 --> [(1, 1, 'a'), (1, 2, 'b'), (2, 4, 'd')] Path: 2 --> [(1, 1, 'a'), (1, 3, 'g'), (3, 2, 'e'), (2, 4, 'c')] Path: 3 --> [(1, 1, 'a'), (1, 3, 'g'), (3, 2, 'e'), (2, 4, 'd')] Path: 4 --> [(1, 1, 'a'), (1, 3, 'g'), (3, 3, 'f'), (3, 2, 'e'), (2, 4, 'c')] Path: 5 --> [(1, 1, 'a'), (1, 3, 'g'), (3, 3, 'f'), (3, 2, 'e'), (2, 4, 'd')] Path: 6 --> [(1, 2, 'b'), (2, 4, 'c')] Path: 7 --> [(1, 2, 'b'), (2, 4, 'd')] Path: 8 --> [(1, 3, 'g'), (3, 2, 'e'), (2, 4, 'c')] Path: 9 --> [(1, 3, 'g'), (3, 2, 'e'), (2, 4, 'd')] Path: 10 --> [(1, 3, 'g'), (3, 3, 'f'), (3, 2, 'e'), (2, 4, 'c')] Path: 11 --> [(1, 3, 'g'), (3, 3, 'f'), (3, 2, 'e'), (2, 4, 'd')] </pre> <p>

1 Ответ

0 голосов
/ 07 апреля 2011

Попробуйте построить новый граф, в котором текущие ребра превращаются в узлы, и между двумя узлами есть ребро, если мы можем использовать их соответствующие ребра, следовательно, в пути. После этого вы можете решить вашу проблему с DFS.

...