边界与终止
约 10 分钟
动手写搜索前,先把两件事想清楚,代码才不会跑飞。
一是终止条件:什么时候算搜到头了?可能是到达终点、选满了 个数、或者搜完一层。二是不可走条件:什么时候这一步非法?走迷宫里就是出界、是墙、已经走过。
这两个判断要放在递归最开头,而且顺序有讲究——必须先判越界,再访问数组:
if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue; // 先挡住越界
if (grid[nx][ny] == 1 || vis[nx][ny]) continue; // 再看是墙 / 走过
顺序反了,会先拿越界下标去读 grid,轻则读到脏数据,重则运行时崩溃(RE)。靠 || 的短路特性,越界时后面的数组访问根本不会执行。
小纸条
走迷宫时有哪几种"不能再往下走"?
登录 后可看答案