#1 TEL求助
查看原帖
#1 TEL求助
745349
BlueStar_zhjy楼主2023/8/6 15:10
#include <bits/stdc++.h>
using namespace std;
int n,a,b,ans=INT_MAX;
int vis[210], s[210];
void dfs(int now,int step){
	if(now==b){
		ans=min(ans,step);
		return;
	}else if(step<=ans){//剪枝-当前步数已经大于已知答案
	    if(now+s[now]<=n && vis[now+s[now]]==0){
	    	vis[now+s[now]]=1;
	    	dfs(now+s[now], step+1);
	    	vis[now+s[now]]=0;
		}
		if(now-s[now]>=1 && vis[now-s[now]]==0){
	    	vis[now-s[now]]=1;
	    	dfs(now-s[now], step+1);
	    	vis[now-s[now]]=0;
		}
	}
}
int main(){
	cin>>n>>a>>b;
	for(int i=1;i<=n;i++){
		cin>>s[i];
	}
	vis[a]=1;
	dfs(a,0);
	cout<<(ans==INT_MAX ? -1 : ans);
	return 0;
}

2023/8/6 15:10
加载中...