记录步数

8 分钟

广搜求最短步数,用一个 dist 数组记下每个位置到起点的步数。递推关系很简单:一个新位置的步数,等于发现它的那个位置的步数加一。

dist[sx][sy] = 0;              // 起点自己是 0 步
q.push({sx, sy}); vis[sx][sy] = true;
while (!q.empty()) {
    pair<int,int> c = q.front(); q.pop();
    for (int d = 0; d < 4; d++) {
        int nx = c.first + dx[d], ny = c.second + dy[d];
        if (能走(nx, ny) && !vis[nx][ny]) {
            vis[nx][ny] = true;
            dist[nx][ny] = dist[c.first][c.second] + 1;  // 步数 +1
            q.push({nx, ny});
        }
    }
}

起点的步数记成 0(它本身不用走);走到终点时读 dist[终点] 就是答案。

小纸条

起点的步数应该记成几?

登录 后可看答案

记录步数 · 考级冲刺 · op599 课程