Java栈实现无Node类迷宫老鼠DFS算法运行循环报错求助
代码运行失败的核心原因
- 栈坐标存取顺序错误:入栈时你先压入x坐标、再压入y坐标,栈是后进先出结构,出栈时你先弹出的元素实际是y坐标,却赋值给了
curx,后弹出的x坐标赋值给了cury,直接导致坐标逻辑完全错位,这是两个坐标间反复循环的核心诱因。
修正方案:调整入栈顺序为先压y、再压x,或者调整出栈赋值逻辑为int cury = stack.pop(); int curx = stack.pop();,保证坐标对应关系正确。 - 合法坐标判断未覆盖终点:
isValid方法仅判定值为0或2的坐标合法,但你定义的终点标记是'e'(对应int值为101),未被纳入合法范围,程序永远无法识别终点位置。 - 方向判断误用
else if分支:四个移动方向的判断用了else if,每次只会压入第一个符合条件的方向到栈中,其余合法方向会被直接忽略,无法实现DFS全路径遍历的逻辑。应去掉所有else,对四个方向独立判断,所有合法方向都压入栈中。 - 终止条件和迷宫配置不匹配:代码中的终止条件是判断当前格子值为
2,但你定义的迷宫终点为'e',没有值为2的格子,就算走到终点也不会触发成功返回。 - 已访问标记逻辑可优化:你定义的
boolean[][] isVisited数组全程未使用,属于无效代码。当前通过修改迷宫值为','标记已访问的逻辑虽然能实现去重,但如果需要保留原始迷宫数据,建议改用isVisited数组做访问标记。
内容的提问来源于stack exchange,提问作者nojob
相关产品推荐
相关产品推荐

