P1135 奇怪的电梯
思路
用bfs
#include<bits/stdc++.h>
using namespace std;
int n,a,b,kk[205];
struct node{
int f,k;//f表示当前是第几层,k表示到达这一层所用的步数
};
queue<node> Q;
bool v[205];//记录当前楼层是否走过
int main(){
cin>>n>>a>>b;
for(int i=1;i<=n;i++) cin>>kk[i];
Q.push((node){a,0});//把起点入队列
while(!Q.empty()){
node u=Q.front();//取队首元素
Q.pop();
if(u.f==b){
cout<<u.k;
return 0;
}
//看从这一层能去哪一层,放入队列
int df=u.f+kk[u.f];//上
if(df<=n&&!v[df]){
v[df]=true;
Q.push((node){df,u.k+1});
}
df=u.f-kk[u.f];//下
if(df>=1&&!v[df]){
v[df]=true;
Q.push((node){df,u.k+1});
}
}
cout<<-1;
return 0;
}