我已经实现了一种解决方案,以找到所有给定2d数组的路径。数组可以像[[1,2],[1,3],[2,4],[3、4]],其中1-> 2,1-> 3、2-> 4、3-> 4。因此,从1到4的所有可能路径可以是1-> 2-> 4和1-> 3->4。对此,最有效的解决方案是什么?
def paths_between(A, B, Array) 我试图从A获取所有可能的路径,然后删除没有到达B的路径
我的解决方案:https : //repl.it/repls/DisguisedTremendousTrials
有没有更有效的方法来获取所有路径?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
你的问题实际上是一个图搜索问题,其中2D数组可以被看作是一个有向图的边集。从点A到点B的所有路径可以通过深度优先搜索(DFS)或广度优先搜索(BFS)来找到,但在这个场景中,DFS通常更直观,因为它能够自然地递归探索所有可能的路径。
你已经提供了一个解决方案的链接,但没有直接展示代码细节。基于你的描述,这里有一个使用Python实现的简化版DFS方法来寻找所有从起点A到终点B的路径:
def find_paths(graph, start, end, path=[]):
path = path + [start]
if start == end:
return [path]
if start not in graph:
return []
paths = []
for node in graph[start]:
if node not in path: # 避免循环
newpaths = find_paths(graph, node, end, path)
for newpath in newpaths:
paths.append(newpath)
return paths
# 将给定的2D数组转换为字典形式的图表示
def array_to_graph(array):
graph = {}
for edge in array:
if edge[0] not in graph:
graph[edge[0]] = []
graph[edge[0]].append(edge[1])
return graph
# 示例输入
array = [[1, 2], [1, 3], [2, 4], [3, 4]]
A = 1
B = 4
graph = array_to_graph(array)
paths = find_paths(graph, A, B)
print("所有从", A, "到", B, "的路径:", paths)
这个解决方案首先将2D数组转换为一个字典,其中键是起始节点,值是该节点可以到达的所有节点列表。然后,find_paths
函数通过递归调用自身来探索所有可能的路径,直到达到目标节点。这种方法避免了在每次查找时重新遍历整个数组,提高了效率。
请注意,如果图中存在环,此方法可能会导致无限循环,因此在实际应用中需要确保图是无环的,或者在find_paths
函数中加入额外逻辑以检测和避免循环。