2017-01-26 6 views
3

Используя Digraph, созданный с помощью GraphViz, как я могу найти кратчайший путь между словами «A» и «H»? Я знаю алгоритм Dijkstra, и я знаю, что GraphViz предлагает инструменты, которые позволяют использовать его, но я не уверен, что он присутствует в библиотеке python.GraphViz, найдите кратчайший путь между двумя узлами

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

from graphviz import Digraph 

f = Digraph('Test', filename='fsm.gv') 
f.body.extend(['rankdir=LR', 'size="8,5"']) 

f.edge('A', 'C') 
f.edge('A', 'B') 
f.edge('B', 'D') 
f.edge('C', 'F') 
f.edge('C', 'E') 
f.edge('C', 'I') 
f.edge('E', 'G') 
f.edge('F', 'E') 
f.edge('G', 'H') 
f.edge('G', 'E') 
f.edge('H', 'F') 
f.edge('H', 'E') 

f.view() 
+1

Поиск документации Я не [нашел ссылку] (http://graphviz.readthedocs.io/en/latest/search.html?q=dijkstra&check_keywords=yes&area=default) на «Dijkstra», поэтому он не присутствуют в библиотеке. Отвечает ли это на ваш вопрос? – usr2564301

+0

@RadLexus на половину? Если кто-то здесь уже закодировал алгоритм Dijkstra с GraphViz в Python, я ознакомлен с тем, как он это сделал –

ответ

0

GraphViz - это инструмент визуализации графа. Внутри он может иметь несколько алгоритмов, но они могут быть недоступны из оболочки, поскольку предназначены для внутреннего использования. Если вам нужно выполнить другие операции на вашем графике, я бы рекомендовал Networkx, который предлагает несколько алгоритмов графа, включая shortest_paths, и затем может выводить на экран dot для визуализации.