80分求助
查看原帖
80分求助
505281
D_M_楼主2022/2/18 21:10
#include <bits/stdc++.h>
using namespace std;
int n,a,b,ans=1e9,num[1010];
bool use[1010],flag;
void Dfs(int cc,int step){
	if(cc>=ans)return;
	if(cc==b){
		//刷新最小步数 
		flag=true;
		ans=min(ans,step);
		return;
	}
	if(cc+num[cc]<=n && !use[cc+num[cc]]){
		use[cc+num[cc]]=true;
		Dfs(cc+num[cc],step+1);
		use[cc+num[cc]]=false;
	}
	if(cc+num[cc]>=1 && !use[cc-num[cc]]){
		use[cc-num[cc]]=true;
		Dfs(cc-num[cc],step+1);
		use[cc-num[cc]]=false;
	}
}
int main(){
	cin >> n >> a >> b;
	for(int i=1;i<=n;i++){
		cin >> num[i];
	}
	Dfs(a,0);
	if(flag){
		cout << ans;
	}else{
		cout << -1;
	}
	return 0;
}
2022/2/18 21:10
加载中...