在格子里走

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)

登录 后可看答案