2011-04-08 63 views
2

有没有办法在pydot中实现这一点?寻找开始,结束并与pydot循环

采取下面的例子:

[输出点文件]

strict graph g{ 
"A" -> "B"; 
"B" -> "C"; 
"C" -> "D"; 
"D" -> "E"; 
} 

[Python的]

print(num.start) 
>>> A 
print(num.steps) 
>>> ["a,b","b,c","c,d","d,e"] 
print(num.end) 
>>> E 

或与下列情况下:

[输出点文件]

strict graph g{ 
"A" -> "B"; 
"B" -> "C"; 
"C" -> "A"; 
} 

[python]的

if num["A"] == num.loop: 
print("[%s] loop detected")%(num["A"]) 

回答

1

Pydot可以写点文件,但它不适用于分析图形。

您需要改为NetworkX。它可以read and write dot files,find circles,找到可达节点并进行拓扑排序。

查看维基百科图表的术语和NetworkX可以完成剩下的工作。

+0

为了将来的参考,我有一个使用networkx在点图中标识周期的python脚本示例:http://blog.jasonantman.com/2012/03/python-script-to-find-dependency-cycles -in-graphviz-dot-files /感谢Jochen为我提供链接以提供脚本。 – 2012-03-29 03:06:11

0

好你的整个图形结构,通过graph.get_edge_list()可以实现标准的深度优先搜索来查找节点之间的最短路径。查找循环与standard graph algorithms同样完成。有关如何在两个节点之间执行最短路径的源代码,请参见Graph implementations in Python上的这篇文章。

如果你正在寻找pydot库,请为你做这件事,你可能会运气不好。