bfs
#include"bits/stdc++.h"
using namespace std;
int n,a,b;
int s[205],v[205];
struct node{
int x,y,step;
};
int bfs(int x){
queue<node>q;
q.push({x,s[x],0});
v[x]=1;
int f=0;
while(!q.empty())
{
int u = q.front().x;
int u1 = q.front().y;
int u2 = q.front().step;
q.pop();
v[u]=1;
if(u == b){
f=1;
return u2;
}
if(u + u1 <= n && !v[u + u1]){
v[u + u1] = 1;
q.push({u+u1,s[u+u1],u2+=1});
}
if(u - u1 >=1 && !v[u - u1]){
v[u - u1] = 1;
q.push({u-u1,s[u-u1],u2+=1});
}
}
if(!f) return -1;
}
int main()
{
cin >> n >> a >> b;
for(int i=1 ; i<=n ; i++) cin >> s[i];
cout << bfs(a) << endl;
return 0;
}
dfs(这是看一位大佬,看懂了写出来)
#include"bits/stdc++.h"
using namespace std;
int s[205],v[205],f=999999;
int n,a,b;
void dfs(int x, int cnt){
if(x == b){
f = min(f,cnt);
}else if(cnt <= f){ // 剪枝
v[x] = 1;
if(x + s[x] <=n && !v[x+s[x]]) dfs(x+s[x],cnt+1);//上升
if(x - s[x] >=1 && !v[x-s[x]]) dfs(x-s[x],cnt+1);//下降
v[x] = 0; //回溯 核心
}
}
int main()
{
cin >> n >> a >> b;
for(int i=1;i<=n;i++) cin >> s[i];
dfs(a,0);
if(f == 999999) cout << -1 << endl;
else cout << f << endl;
return 0;
}