使用pydot查找起点、终点和循环

3
有没有办法在pydot中实现这个?
以以下示例为例:
[输出的Dot文件]
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

或者是以下情况:
[输出的Dot文件]
strict graph g{
"A" -> "B";
"B" -> "C";
"C" -> "A";
}

[Python]

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

1

你已经拥有了整个图结构,通过 graph.get_edge_list() 你可以实现标准的深度优先搜索来找到节点之间的最短路径。寻找循环同样可以使用 标准图算法。查看这篇关于 Python中的图形实现 的文章,获取如何在两个节点之间进行最短路径的源代码。

如果你正在寻找 pydot 库来帮助你完成这个任务,那么你可能会失望。


1

Pydot能够写入dot文件,但它不适用于分析图表。

你应该使用NetworkX。它可以读取和写入DOT文件找到圆形节点,找到可达节点并进行拓扑排序。

在维基百科上查找图表术语,NetworkX会为您完成其余部分。


为了以后参考,我有一个使用networkx来识别dot图中循环的Python脚本示例,链接为:http://blog.jasonantman.com/2012/03/python-script-to-find-dependency-cycles-in-graphviz-dot-files/ 感谢Jochen给我提供链接来编写这个脚本。 - Jason Antman
你的链接已经失效。 - Cerin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接