我试图为一个有向图做一个相邻的列表,而图有多个入口和出口点。在图中,节点将是类似的、或不是、XOR等,并且入口和出口点将是单个位(0或1)。
我有以下节点:
条目A:1
条目B:1
条目C:0
出口D:?
出口E:?
节点1:或
节点2:和
节点3:和
节点4:不
点头5:和
节点6:或
节点7:不
节点8:不
节点9:和
节点10:和
节点11:或
以及它们之间的以下联系:
条目A:node1,node2
条目B:node1,node2
条目C:节点3、节点7、节点10
节点1:node3,node5
节点2:node4,node6
节点3:node6
节点4:节点5
节点5:节点8,节点9
节点6:退出D
节点7:节点9
节点8:node10
节点9:node11
节点10:node11:
节点11:退出E
图片:
所以现在我需要通过跟踪有向图的路径来计算D和E出口处的字节。
我发现了一个呼吸的第一个图表搜索与单入口和出口点的链接在这里:
Graph Algorithm To Find All Connections Between Two Arbitrary Vertices。
如何在链接中适应这个呼吸第一图搜索,这样我可以有多个入口和出口点,同时删除/改变递归部分(因为我在使用上面链接中的代码时得到StackOverflowError
s,即使我只有1个入口和出口点)。
最佳答案
消除递归的思想如下:当一个节点的所有连接都得到已知值时,该节点将排队执行。在您的示例中,在开始时,这些是节点n1、n2、n7。Executor从队列中一个接一个地获取准备好执行的节点,计算输出值并将其传递给下一个连接,这可能会导致另一个节点排队等。当执行队列变为空时,结果就准备好了。
您可以自己编程执行器和节点(200-300行代码),也可以使用现成的库。要搜索库,请查找“有色petri网java实现”。有许多可用的petri网引擎的java实现。除了我自己的df4h-core,我没有使用任何一个从计算各种数学公式的FormulaTest.java开始您必须实现自己的计算布尔运算的节点。
关于java - 具有多个入口和导出点的广度优先图搜索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21413989/