开发者社区 问答 正文

查找所有路径给定的二维数组

我已经实现了一种解决方案,以找到所有给定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

有没有更有效的方法来获取所有路径?

展开
收起
被纵养的懒猫 2019-10-09 16:43:11 494 分享 版权
阿里云 AI 助理回答

你的问题实际上是一个图搜索问题,其中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函数中加入额外逻辑以检测和避免循环。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: