You need to enable JavaScript to run this app. Python基于广度优先搜索实现迷宫功能时出现无限循环问题
优惠活动
大模型
产品
解决方案
定价
更多

Python基于广度优先搜索实现迷宫功能时出现无限循环问题

BFS迷宫无限循环问题排查

代码现存的核心缺陷

  • 起点定位逻辑完全失效
    所有查找起点S的循环都存在逻辑错误:遍历range(len(maze[0]))得到的是整数索引,直接拿整数和字符串'S'做等值匹配永远不会命中,starting_point始终保持初始值0。部分代码里还引用了未定义的行变量i,运行时会直接触发变量未定义报错。
  • 已访问标记逻辑完全失效
    find_solution函数每次被调用时都会把visited列表重置为空,后续向visited追加的也不是已到达的坐标值,而是单个移动指令的字符串,等于永远记不住哪些位置已经遍历过,同一个位置会通过不同指令组合被反复加入队列,最终触发无限循环。
    而且当前BFS存储的是整段移动指令字符串,没有和具体坐标做绑定,根本没法基于坐标去重。
  • 移动指令解析逻辑错误
    finished_maze函数里直接遍历solution字符串的单个字符,没有用正则拆分完整的指令词,拿到的是单个字母,永远匹配不到'Up'/'Down'这类完整指令,路径移动计算完全错误。
  • 边界判断逻辑错误
    is_valid函数里判断行号k的合法范围时,错把列数len(maze[0])作为上界,行号的合法范围应该是0 <= k < len(maze),行总数和列数的差异会导致频繁数组越界。
  • 坐标赋值逻辑混乱
    代码里定义j为列坐标、k为行坐标,但查找起点时错误把整行字符串maze[position]赋值给starting_point,类型和值完全不匹配,后续坐标计算全部错位。
  • 路径回溯能力缺失
    原设计预期遍历完成后回溯生成最短路径,但当前BFS只存储移动指令序列,没有记录每个坐标的前驱节点,既没法高效回溯路径,也无法把路径上的位置标记为1。

正确实现的核心思路

  • 先全量遍历迷宫,逐行逐列匹配字符:找到值为'S'的起点坐标、值为'E'的终点坐标,用(row, col)元组存储。
  • BFS队列的入队元素统一存储(当前坐标, 到达当前坐标的路径),已访问集合直接存储所有已经入过队的坐标元组,只要坐标在集合内就不再重复入队,从根源上避免重复遍历。
  • 通行性判断同时满足三个条件:坐标在行、列的合法边界内,当前位置不是墙值'0',且坐标没有被访问过。
  • 当BFS出队的坐标是终点坐标时,直接终止遍历,收集路径上的所有坐标,打印迷宫时将这些位置替换为标记值1,其余位置保持原迷宫字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.11 06:36:04