测试样例可以过,但输入数据的就不对了,要怎么改啊?大佬们帮帮忙
查看原帖
测试样例可以过,但输入数据的就不对了,要怎么改啊?大佬们帮帮忙
1282782
Christian_楼主2024/3/5 11:50
#include <bits/stdc++.h>
using namespace std;

const int N=210;
int g[N],cnt[N],vis[N];
int n,s,f;
int d[]={1,-1};
int q[N];

int bfs(){
	memset(cnt,-1,sizeof cnt);
	memset(vis,-1,sizeof vis);
	q[0]=s,q[1]=f;
	cnt[s]=0,cnt[f]=0;
	vis[s]=1,vis[f]=2;
	int hh=0,tt=1,time;
	while(hh<=tt){
		int t=q[hh++];
		for(int i=0;i<2;i++){
			int a=t+d[i]*g[t];
			if(a<1 || a>n) continue;
			if(vis[t]+vis[a]==3){
				time=cnt[t]+cnt[a]+1;
				return time;
			}
			if(cnt[a]>=0) continue;
			q[++tt]=a;
			cnt[a]=cnt[t]+1;
			if(vis[a]==-1) vis[a]=vis[t];
		}
	}
	return -1;
}

int main(){
	scanf("%d %d %d",&n,&s,&f);
	for(int i=1;i<=n;i++){
		scanf("%d",&g[i]);
	}
	int res=bfs();
	cout<<res<<endl;
	return 0;
}
2024/3/5 11:50
加载中...