Java实现网格DFS路径统计时添加return语句输出异常原因求解
问题原因分析
该问题是回溯算法的状态还原错误导致的,具体逻辑如下:
- 你的DFS函数在通过边界和访问状态校验后,会第一时间将当前坐标
board[i][j]标记为已访问(赋值为1) - 当触发终点判断条件
i == m - 1 && j == n - 1时,如果添加了return语句,函数会直接终止,后续负责回溯还原的board[i][j] = 0代码完全没有执行机会 - 这就会导致终点坐标永久被标记为已访问,后续所有其他路径走到终点位置时,都会被开头
board[i][j] == 1的校验规则拦截,直接判定为非法路径返回,最终只会统计到第一条走到终点的路径
优化修复方案
如果要保留return语句减少无意义的递归调用、提升性能,只需要在return前手动还原终点的访问状态即可,修改后的终点分支代码如下:
if (i == m - 1 && j == n - 1) { count++; System.out.print(path + " "); board[i][j] = 0; // 手动还原终点的访问标记 return; }
内容的提问来源于stack exchange,提问作者Piyush Keshari
相关产品推荐
相关产品推荐

