题解
2026-07-07 15:02:58
发布于:重庆
6阅读
0回复
0点赞
这题可以用用BFS
在BFS函数里,对于每个楼层,我们要判断是否可以上楼和下楼,若可以,就标记到vis数组里,并且加入队列,防止重复走,并且记录到dist数组里,记录最短步数,然后判断是否已经到达终点,如果是,直接返回dist的终点下标的数字,如果队列全空,并且没有到达终点,就是走不到,返回-1,即可AC
AC CODE
#include<bits/stdc++.h>
using namespace std;
int n, a, b;
int k[210], dist[210];
bool vis[210];
int bfs(int n, int a, int b){
queue <int> q;
q.push(a);
while (!q.empty()){
int cur = q.front();
q.pop();
if (cur == b){
return dist[cur];
}
int up = cur + k[cur];
int down = cur - k[cur];
if (up >= 1 && up <= n && !vis[up]){
vis[up] = true;
dist[up] = dist[cur] + 1;
q.push(up);
}
if (down >= 1 && down <= n && !vis[down]){
vis[down] = true;
dist[down] = dist[cur] + 1;
q.push(down);
}
}
return -1;
}
int main(){
cin >> n >> a >> b;
for (int i = 1;i <= n;i ++){
cin >> k[i];
}
cout << bfs(n, a, b);
}
全部评论 1
d
1周前 来自 重庆
0








有帮助,赞一个