【发布时间】:2019-09-02 08:54:01
【问题描述】:
我有这张有 5 个巴士站的路线图:
a --_ _--b
\--c--/
d ---/ \---e
我需要获取所有可能的有效路径。有效路径是两个巴士站之间的路径,而不会跳过其间的任何巴士站。
例如,如果我们用二进制列表表示公交车站
a b c d e
Stations = [1,1,1,1,1]
以下路径有效:
P1 = [1,0,1,0,1] # a <-> c <-> e
P2 = [0,0,1,1,0] # c <-> b
P3 = [0,0,0,0,1] # e
这些都是无效的:
P4 = [1,1,0,0,0]
P5 = [0,1,0,1,0]
我创建了一个有效连接矩阵:
a b c d e
a 1 1
b 1 1
c 1 1 1 1 1
d 1 1
e 1 1
我创造了所有可能的组合
c = list(itertools.product([0, 1], repeat=len(stations))
并将每个路径乘以上述矩阵,但我没有得到任何有意义的东西。有谁知道获得所有有效路径的方法?我们的地图上可能有任意数量的巴士站。
【问题讨论】:
-
您可以查看类似于查找汉密尔顿路径的算法。这篇文章应该有帮助:hackerearth.com/practice/algorithms/graphs/hamiltonian-path/…
-
一个令人困惑的路径“二进制列表”表示示例:
[1, 1, 1, 0, 0]。看起来a转到b转到c,但这是无效的。但这可能意味着a转到c转到b,这是一个有效路径。 -
我的意思是,您当然可以生成您指定的表示形式的所有路径,但正如@RoryDaulton 所说,这似乎不是一个有用的表示形式......
-
@RoryDaulton 我不知道如何回答“你知道多少图论?你了解广度优先搜索、深度优先搜索等吗?”路径 [1,1,1,0,0] 将是有效路径,因为您可以为巴士站 a、d 和 c 提供巴士路线。 [1,1,0,0,0] 是无效的,因为你不能在不通过 c 的情况下从 a 到 d 或 d 到 a。如果你还是不明白,我可以给你更多例子。