我有一个检查是否有一个grpahs正在填写另一个图形定义的信息流。 为此,我创建了一个名为FlowGraph的类,如下所示。
class FlowGraph:
G=nx.DiGraph()
I=[ ] #input
O=[ ] #output
然后我想检查节点的输入和输出集是否相同,然后分别在两个图上检查每个节点的可达性。如何在括号中实现python,networkx代码中的内容。
def check(FF=FlowGraph, GG=FlowGraph):
if FF.I==GG.I && FF.O==GG.O:
for all u in FF.I:
for all v in FF.O:
if (flow from u to v in FF):
if not (flow from u to v in GG):
return False
else:
return True
else:
return False
答案 0 :(得分:0)
我没有在这台机器上安装networkX,所以我无法检查,但我认为它会起作用。
def check(FF=FlowGraph, GG=FlowGraph):
if FF.I != GG.I or FF.O != GG.O:
return False
for u in FF.I:
reachF = { v for v in nx.dfs_preorder_nodes(FF,u) if v in FF.O }
reachG = { v for v in nx.dfs_preorder_nodes(GG,u) if v in GG.O }
if not reachF <= reachG:
return False
return True
对于每个输入节点u
,我们找到u
中FF
可以到达的所有输出节点以及u
中GG
可到达的所有输出节点1}}。策略是FF
中的每个流都必须是GG
中的流,因此reachF
必须是reachG
的子集。如果这不是真的,我们会立即失败。如果所有测试都通过,则图表通过。