有没有大佬知道我为什么最后一个测试点RE了??
查看原帖
有没有大佬知道我为什么最后一个测试点RE了??
229056
Wased楼主2020/10/1 15:21

代码如下:

#include<iostream>
#include<cstdlib>
using namespace std;
const int N=201;
int k[N],w[N][N];
int n,a,b,h,t;
int cnt=0;
bool f[N];
struct q{
	int num;
	int s;
}que[N];
int main(){
	cin>>n>>a>>b;
	f[a]=1;
	if(a==b){
		cout<<0<<endl;
		return 0;
	}
	for(int i=1;i<=n;i++){
		cin>>k[i];
		if(i+k[i]<=n) w[i][i+k[i]]=1;
		if(i-k[i]>0)  w[i][i-k[i]]=1; 		//用w判断是否可以达到 
	}
	for(int i=1;i<=n;i++){
		if(w[a][i]==1){
			t++;
			que[t].num=i;
			que[t].s=1;
			f[i]=1; 				//如果a可以到i,则i入队 
			while(h!=t){
				h++;
				for(int j=1;j<=n;j++){
					if(w[que[h].num][j]==1&&f[j]==0){
						t++;
						que[t].num=j;
						que[t].s=que[h].s+1;
						f[que[h].num]=1;		//如果队首元素可以到j且j没得、被访问,则j入队并标记 
					}
					if(que[t].num==b){
						cout<<que[t].s<<endl;
						return 0;
					}
				}
				
			}
			
		}
	}
		cout<<-1<<endl;

	return 0;
}
2020/10/1 15:21
加载中...