我有一个情况需要用Python来解决,但是我对图表并没有足够的了解。我找到了一个库 networkx
,看起来非常适合这个相对简单的任务,但我在做我想要的确切事情时遇到了问题,而这些事情应该是相当简单的。
我有一个节点列表,可以有不同的类型,以及两个“类”邻居,向上和向下。任务是查找两个目标节点之间的路径,并考虑一些约束条件:
- 只有特定类型的节点可以被遍历,即如果起始节点是类型 x,则路径中的任何节点都必须来自另一组路径 y 或 z
- 如果一个节点具有类型 y,则只能通过一次
- 如果一个节点具有类型 z,则可以通过两次
- 如果访问类型为 z 的节点,则出口必须来自不同类别的邻居,即如果从向上访问,则出口必须来自向下
所以,我尝试了一些实验,但我像我说的那样,遇到了麻烦。首先,我不确定这实际上代表什么类型的图形?它不是方向性的,因为无论您从节点1到节点2还是从节点2到节点1(除了最后一种情况外),都没有关系,所以这使事情变得有点复杂... 这意味着我不能只创建一个简单的多向图形,因为我必须考虑到那个约束条件。其次,我必须遍历这些节点,但指定仅特定类型的节点可用于路径。此外,在发生最后一种情况时,我必须考虑入口和出口类别/方向,这使其处于某种有向状态。
以下是一些示例代码:
import networkx as nx
G=nx.DiGraph()
G.add_node(1, type=1)
G.add_node(2, type=2)
G.add_node(3, type=3)
G.add_edge(1,2, side="up")
G.add_edge(1,3, side="up")
G.add_edge(2,1, side="down")
G.add_edge(2,3, side="down")
for path in nx.all_simple_paths(G,1,3):
print path
输出结果还不错,但我需要这些约束条件。您有什么建议可以帮我实现这些约束条件,或者在理解这种类型问题上给我更多的指导,或者为这个问题提供一个不同的方法或库?也许一个简单的基于词典的算法会适合这个需求?
谢谢!