【发布时间】:2019-08-09 10:20:06
【问题描述】:
试图找到从起始顶点到结束顶点的所有可能路径。这就是我目前所拥有的。
def all_paths(adj_list, source, destination):
paths = []
for neighbour,_ in adj_list[source]:
path = [source,neighbour]
state = ['U'] * len(adj_list)
state[neighbour] = 'D'
path = finder(adj_list, neighbour, state, path, destination)
paths.append(path)
return paths
def finder(adj_list, current, state, path, end):
for neighbour,_ in adj_list[current]:
if neighbour == end:
path.append(neighbour)
return path
if state[neighbour] == 'U':
state[neighbour] = 'D'
path.append(finder(adj_list, neighbour, state, path, end))
return path
状态数组是为了确保没有顶点被访问两次(U未被发现,D被发现。) adj_list 是图的邻接列表,因此在列表的 index[i] 处,它具有通过边连接到 i 的所有顶点的列表(无是所述边的权重)
输入是
adj_list = [[(1, None), (2, None)], [(0, None), (2, None)], [(1, None), (0, None)]]
print(sorted(all_paths(adj_list, 0, 2)))
预期的输出是
[[0, 1, 2], [0, 2]]
我的输出是
[[0, 1, 2, [...]], [0, 2, 2, [...], [...]]]
不确定我如何在第二条路径中获得这些点和重复的 2?
【问题讨论】:
-
adjacency_list是做什么的? -
这是一个改进,但我仍然不明白
adj_list是如何表示点的邻接关系的——其中的信息是如何布局的/它的结构意味着什么。 -
...表示你的数据结构是自引用的:Python 不能全部打印出来,因为它永远不会停止引用自身的其他部分。我没有研究细节,但是很怀疑您将path作为参数传递给函数,在该函数中对其进行变异,然后将其返回。这似乎是错误的,它可能是你麻烦的根源——或者至少是其中的一部分。