You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python矩阵4方向全路径查找代码问题:无法返回所有路径如何修复

矩阵四方向全路径查找修改方案

原代码核心问题

  • 仅执行了单次移动逻辑,没有循环/递归遍历机制,无法生成完整路径
  • 无回溯逻辑,遇到分叉路径只会选择第一个符合条件的方向,无法覆盖所有路径分支
  • 无重复访问标记,未避免走回头路导致的路径循环问题
  • 预处理逻辑错误:将集合V直接解包为(a,b)生成range的逻辑完全不符合集合取值逻辑,且B=I为浅拷贝会修改原输入矩阵
  • 缺失终点触发逻辑,到达终点后没有执行路径保存操作

修正后完整代码

def find_path(I, x1,y1,x2,y2,V, path_type):
    lr = len(I)
    lc = len(I[0]) if lr > 0 else 0
    # 深拷贝输入矩阵生成通行标记矩阵,避免修改原数组
    B = [row.copy() for row in I]
    # 预处理标记可通行区域
    for i in range(lr):
        for j in range(lc):
            B[i][j] = 'a' if B[i][j] in V else 'b'
    # 标记终点
    end_x, end_y = x2 - 1, y2 - 1
    B[end_x][end_y] = 'q'
    # 起点坐标转换
    start_x, start_y = x1 - 1, y1 - 1
    Tp = []
    # 仅处理path_type=4的逻辑
    if path_type == 4:
        # 定义DFS遍历函数
        def dfs(x, y, current_path):
            # 到达终点,保存路径
            if B[x][y] == 'q':
                Tp.append(current_path.copy())
                return
            # 四方向遍历:上下左右
            directions = [(-1,0), (1,0), (0,-1), (0,1)]
            for dx, dy in directions:
                nx = x + dx
                ny = y + dy
                # 判断坐标合法、可通行、未在当前路径中(避免走回头路)
                if 0 <= nx < lr and 0 <= ny < lc:
                    if (B[nx][ny] == 'a' or B[nx][ny] == 'q') and (nx, ny) not in current_path:
                        current_path.append((nx, ny))
                        dfs(nx, ny, current_path)
                        # 回溯
                        current_path.pop()
        # 起点合法性判断
        if 0 <= start_x < lr and 0 <= start_y < lc and (B[start_x][start_y] == 'a' or B[start_x][start_y] == 'q'):
            dfs(start_x, start_y, [(start_x, start_y)])
        # 无路径时添加提示,不需要可删除下行
        if not Tp:
            Tp.append(["no path"])
    return Tp


# 测试用例
I=[[1,0,3,2,4],[4,3,4,0,2],[2,2,1,3,0],[2,4,0,3,2],[3,2,4,1,0]]
x1=4 
y1=1 
x2=2
y2=5
V={4,2}
path_type=4 
A=find_path(I, x1,y1,x2,y2,V, path_type)
# 打印所有路径
for idx, path in enumerate(A):
    print(f"路径{idx+1}: {path}")

代码说明

  • 保留了原代码path_type==4的判断逻辑,符合需求要求
  • 采用DFS深度优先搜索遍历所有四方向可行路径,自带回溯机制覆盖所有分叉路径
  • 通过判断坐标是否已存在于当前路径避免重复访问和循环问题
  • 预处理逻辑修正为直接判断矩阵值是否属于集合V,完全符合可通行规则要求
  • 到达终点自动保存路径,所有路径探索完成后统一返回结果集,无第三方模块依赖

内容的提问来源于stack exchange,提问作者Arvind Meena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 00:09:02