我有一个问题,我有一个有向(或非有向)非加权图,我需要找到从 st 开始的简单路径。唯一的复杂之处是我需要避免某些标记为红色的节点。
我找到了 python NetworkX 图形库,发现它非常合适。我想使用 networkx.dijkstra_path() (或者也可以使用 bfs 函数)来找到最短路径。
在这段代码中,我构建了一个非常简单的图形,并找到从 s = 0 到 t = 4 的路径:
import networkx
G = networkx.Graph()
for i in range(5):
G.add_node(i)
# from zero
G.add_edge(0,1)
G.add_edge(0,3)
# from 1
G.add_edge(1,2)
# from 2
G.add_edge(2,4)
# from 3
G.add_edge(3,4)
path = networkx.dijkstra_path(G, 0, 4)
该网络有这些节点:[0, 1, 2, 3, 4] 这些边:[(0, 1), (0, 3), (1, 2), (2, 4), (3, 4) ] dijkstra 为我们提供了从 0-4 的路径: [0, 3, 4] 该图在视觉上看起来像这样(使用 matplotlib 制作):
但现在我想说节点 3 是红色的。所以我们需要避免它。这将使最短路径[0,1,2,4]。有什么方法可以阻止节点 3,以便 dijkstra 可以避免它?
