检查图表中的流程

时间:2015-11-09 13:52:01

标签: python graph networkx

我有一个检查是否有一个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

1 个答案:

答案 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,我们找到uFF可以到达的所有输出节点以及uGG可到达的所有输出节点1}}。策略是FF中的每个流都必须是GG中的流,因此reachF必须是reachG的子集。如果这不是真的,我们会立即失败。如果所有测试都通过,则图表通过。