深搜#1 TLE 100分 蒟蒻求助
#include <bits/stdc++.h>
using namespace std;
const int N = 205;
const int INF = 0x3f3f3f3f;
int n, a, b, minn;
int k[N];
int is_vis[N]; //有没有去过
void search(int x, int step)
{
if (x == b)
{
minn = min(minn, step);
return;
}
else if (step <= minn) //只有比 minn小的 才有必要继续搜下去
{
is_vis[x] = 1; //来过
//往上走
//能往上 并且没有来过 如果来过 很有可能就死循环了
if (x + k[x] <= n && !is_vis[x + k[x]])
{
search(x + k[x], step + 1);
}
//往下走
if (x - k[x] >= 1 && !is_vis[x - k[x]])
{
search(x - k[x], step + 1);
}
is_vis[x] = 0; //回溯
}
}
int main ()
{
cin >> n >> a >> b;
for (int i = 1; i <= n; i++)
{
cin >> k[i];
}
minn = INF, is_vis[a] = 1;
search(a, 0);
if (minn != INF)
cout << minn;
else
cout << "-1";
}