记录步数
约 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[终点] 就是答案。
小纸条
起点的步数应该记成几?
登录 后可看答案