DFS 64分悬关
查看原帖
DFS 64分悬关
733896
LeoChen1229A楼主2024/12/14 15:19
#include<bits/stdc++.h>
using namespace std;
const int N = 2147483647;
int n,a,b,x[2005],ans = N;
bool vis[2005];
int dx[2] = {1,-1};
void dfs(int cur ,int sum)
{
	if(sum > ans)
	{
		return ;
	}
	if(cur == b)
	{
		ans = min(ans,sum);
		return ;
	}
	for(int i = 0; i <= 1; i++)
	{
		int next = cur + x[cur] * dx[i];
		if(next >= 1 && next <= n && vis[next] == 0)
		{
			vis[next] = 1;
			dfs(next,sum + 1);
			vis[next] = 0;
		}
	}
	return ;
}
int main()
{
	cin >> n >> a >> b;
	for(int i = 1; i <= n; i++)
	{
		cin >> x[i];
	}
	dfs(a,0);
	if(ans == N)
	{
		cout << -1;
	}
	else
	cout << ans;
	return 0;
}
2024/12/14 15:19
加载中...