一本通 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;
}