每次有上下两种选法dfs
次数大于INF时要剪枝
当前的楼层若之前走过 剪枝
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 210;
int st[N];
int a[N];
int n,x,y;
int INF = 0x3f3f3f3f;
void dfs(int u , int cou)
{
if(cou > INF) return ;
if(st[u]) return ;
if(u < 1 || u > n) return;
if(u == y)
{
INF = min(cou , INF);
return ;
}
st[u] = 1;
dfs(u + a[u] , cou+1);
dfs(u - a[u] , cou+1);
st[u] = 0;
}
int main()
{
cin>>n>>x>>y;
for(int i = 1 ; i <= n ; i++) cin>>a[i];
dfs(x,0);
if(INF != 0x3f3f3f3f) cout<<INF;
else cout<<-1;
return 0;
}