//这题似乎是bfs更好做......
//但是我实在不想写bfs了
//所以我不做bfs了,dfs!
#include<bits/stdc++.h>
#define int long long//为防止十年noi一场空,____________所以直接改名
using namespace std;
int N, A, B, p[205],result=1145141919810;
bool f[205];//存楼层状态防止反复循环一层
void dfs(int now,int step){
if (now == B) {//结束条件
result = min(step, result);//当前和最小比较
return;
}
if (step>result) {
return;//超了直接关,接着搜只会占时、空
}
f[now]=true;//标记
if (now + p[now] <= N && !f[now + p[now]]) {
dfs(now + p[now], step + 1);//向上摁电梯
}
if (now - p[now] >= 1 && !f[now - p[now]]) {
dfs(now - p[now], step + 1);//向下摁电梯
}
f[now] = false;//还原
}
signed main(){//dfs传统main函数总共10几行
ios::sync_with_stdio(false);
cin.tie(0);
cin>>N>>A>>B;
for (int i=1;i<=N;i++)
cin>>p[i];
dfs(A,0);
if (result==1145141919810)//如果没搜到result就反-1
cout<<"-1";
else
cout<<result;
return 0;
}
100分unaccept?
T了???
时复似乎没问题啊
求佬