一本通 1360
奇怪的电梯 代码
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <stack>
#include <queue>
#define maxn 1010
using namespace std;
int arr[maxn],flags[maxn];
int main(){
memset(flags,-1,sizeof flags);
int n,a,b,i = 1,j = 0,cnt;
cin >> n >> a >> b;
queue<int> que;
for (int i = 1;i <= n;++i){
scanf("%d",arr+i);
}
que.push(a),cnt = 1,flags[a] = 0;
while(!que.empty()){
while(i){
int x = que.front();que.pop();
if(1 <= x+arr[x] && x+arr[x] <= n && flags[x+arr[x]] == -1){
que.push(x+arr[x]),j++;
flags[x+arr[x]] = cnt;
}
if(1 <= x-arr[x] && x-arr[x] <= n && flags[x-arr[x]] == -1){
que.push(x-arr[x]),j++;
flags[x-arr[x]] = cnt;
}
i--;
}
cnt++,i = j,j = 0;
}
printf("%d\n",flags[b] );
return 0;
}