求助
查看原帖
求助
431956
_k_e_v_i_n_楼主2022/1/23 11:58

前7个点AC,后面WA

#include<iostream>
#include<cstdio>
#include<cmath>
#include<stack>
#include<queue>
#include<set>
#include<cstring>
#include<algorithm>
#define INF 0x7fffffff
#define ll long long
using namespace std;
int t,n,a,b,vis[100001],cnt,k[100001];
struct node{
    int now,step;
};
queue<node>q;
int main(){
    cin>>n>>a>>b;
    for(int i=1;i<=n;i++)	cin>>k[i];
    vis[a]=1;
    q.push((node){a,0});
    while(!q.empty()){
    	if(cnt>100000){
    		cout<<-1;
    		return 0;
		}
        node n1=q.front();
        q.pop();
        if(n1.now==b){
            cout<<n1.step<<endl;
            return 0;
        }
        node n2;
        if(n1.now+k[n1.now]<=100000&&!vis[n1.now+1]){
            n2.now=n1.now+k[n1.now];
            n2.step=n1.step+1;
            q.push(n2);
            vis[n1.now+k[n1.now]]=1;
        }
        if(n1.now-k[n1.now]>=1&&!vis[n1.now-1]){
            n2.now=n1.now-k[n1.now];
            n2.step=n1.step+1;
            q.push(n2);
            vis[n1.now-k[n1.now]]=1;
        }
        cnt++;
    }
    return 0;
}
2022/1/23 11:58
加载中...