http://ybt.ssoier.cn:8088/problem_show.php?pid=1360
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n, a, b; 4 int k[205]; 5 bool vis[205]; 6 struct node{ 7 int x, s; 8 }; 9 node que[205]; 10 int f, r; 11 int ans=-1; 12 void lift(int nx, int fs){ 13 if(nx>=1 && nx<=n && vis[nx]==0){//判断是否满足入队条件 14 vis[nx]=1;//更改状态,防止重复访问 15 r++;//队列后移准备入队 16 que[r].x=nx;//入队 17 que[r].s=fs+1; 18 } 19 } 20 int main() 21 { 22 cin>>n>>a>>b; 23 for(int i=1; i<=n; i++)cin>>k[i]; 24 f=r=1;//队列初始化 25 que[r].x=a; que[r].s=0;//初始楼层入队 26 27 while(f<=r){ 28 int fx=que[f].x;//获取队首信息 29 int fs=que[f].s; 30 if(fx==b){ 31 ans=fs; 32 break; 33 } 34 lift(fx+k[fx], fs);//电梯向上 35 lift(fx-k[fx], fs);//电梯向下 36 f++;//队首信息出队 37 } 38 cout<<ans; 39 return 0; 40 }