在格子里走
约 10 分钟
接着方向数组,从格子 往第 个方向走一步,就是 nx=x+dx[k]; ny=y+dy[k];。但走之前必须先检查新位置有没有出界——行号、列号是否都还在合法范围内,出界就不能走。
设网格 行 列,下标从 0 到 、 到 :
bool inMap(int x, int y) {
return x >= 0 && x < n && y >= 0 && y < m;
}
// 使用
for (int k = 0; k < 4; k++) {
int nx = x + dx[k], ny = y + dy[k];
if (!inMap(nx, ny)) continue; // 出界,跳过
if (grid[nx][ny] == '#') continue; // 障碍,跳过
// 合法,才能走到 (nx, ny)
}
坑一:判断顺序很重要——先判越界,再访问 grid[nx][ny],反过来会先越界读数组导致错误。坑二:下标从 0 开始时合法行号是 ,(如 5×5 里 nx=5)已经越界。搜索、洪水填充都靠这套"算新位置→判越界→再前进"。
小纸条
在 5×5 格子里,走到行号 nx=5 时越界了吗?(下标 0 到 4)
登录 后可看答案