80分求改
查看原帖
80分求改
977653
I_am_a_boy楼主2023/8/23 15:56
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
const int N=1000000;
int n,a,b,c[N],ans=0;
int vis[N]={-1};
int main()
{
	cin>>n>>a>>b;
	for(int i=1;i<=n;i++)
	{
		cin>>c[i];
	}
	if(a==b)
	{
		cout<<0;
		return 0;
	}
	vis[a]=0;
	queue<int>q;
	q.push(a);
	while(!q.empty())
	{
		int p=q.front();q.pop();
		if(p==b)break;
		if(p+c[p]<=n and vis[p+c[p]]==0)
		{
			q.push(p+c[p]);
			vis[p+c[p]]=vis[p]+1;
			ans=1;
		}
		if(p-c[p]>=1 and vis[p+c[p]]==0)
		{
			q.push(p-c[p]);
			vis[p-c[p]]=vis[p]+1;
			ans=1;
		}
	}
	cout<<vis[b];
}
2023/8/23 15:56
加载中...