题目传送门
思路
这题使用深搜。深搜看一下是否会超出边界,如果没超出就搜索,最后看一下答案是否
被更改,如果没被更改就输出 − 1 -1 −1,否则输出答案。
代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,a,b;
int ans[205],dist[205];
void init(){
for(int i=0;i<=205;i++){
ans[i]=0x3f3f3f3f;
}
}
void dfs(int s,int t){
ans[s]=t;
if(s+dist[s]<=n&&t+1<ans[s+dist[s]]){
dfs(s+dist[s],t+1);
}
if(s-dist[s]>0&&t+1<ans[s-dist[s]]){
dfs(s-dist[s],t+1);
}
}
signed main(){
init();
cin>>n>>a>>b;
for(int i=1;i<=n;i++){
cin>>dist[i];
}
dfs(a,0);
if(ans[b]==0x3f3f3f3f){
cout<<-1<<endl;
}else{
cout<<ans[b]<<endl;
}
return 0;
}