AC
2025-10-11 22:17:22
发布于:江苏
6阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
int n,a,b,k[205];
//结构体 队列 数组表示第几层是否已经访问过
struct node{
int x,step;// 当前楼层 step 从起点走到当前楼层最小步数
};
queue<node>q;
bool vis[205];//vis[10]存1 表示10层已经被访问过
void bfs(){
while(!q.empty()){
node t=q.front();
q.pop();
//t是否为终点
if(t.x==b){
cout<<t.step;
return ;
}
//电梯往上走👆
int nx=t.x+k[t.x];
if(nx>=1&&nx<=n&&vis[nx]==0){
//入队 标记为已访问
q.push({nx,t.step+1});
vis[nx]=1;
}
//电梯往下走👇
nx=t.x-k[t.x];
if(nx>=1&&nx<=n&&vis[nx]==0){
//入队 标记为已访问
q.push({nx,t.step+1});
vis[nx]=1;
}
}
cout<<-1;
}
int main(){
cin>>n>>a>>b;
for(int i=1;i<=n;i++){
cin>>k[i];
}
//开始广搜
q.push({a,0});
vis[a]=1;
bfs();
return 0;
}
这里空空如也







有帮助,赞一个