1 条题解

  • 0
    @ 2024-5-31 19:53:50

    思路

    此题是一张有向图,我们先建图,再bfs,记得加上记忆化。

    AC Code

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    const ll N=205;
    ll n,A,B,ans=-1;
    struct node1{
        ll up,down;
    }a[N];
    struct node2{
        ll x,cnt;
    };
    bool flag[N];
    queue<node2> q;
    void bfs(ll x){
        q.push({x,0});
        while(!q.empty()){
            node2 p=q.front();
            q.pop();
            if(p.x<1||p.x>n||flag[p.x])
                continue;
            flag[p.x]=1;
            if(p.x==B){
                ans=p.cnt;
                return;
            }
            q.push({a[p.x].up,p.cnt+1}),q.push({a[p.x].down,p.cnt+1});
        }
    }
    int main(){
        scanf("%lld%lld%lld",&n,&A,&B);
        for(ll i=1,x;i<=n;i++)
            scanf("%lld",&x),a[i].up=i+x,a[i].down=i-x;
        bfs(A);
        printf("%lld",ans);
        return 0;
    }
    
    • 1

    信息

    ID
    765
    时间
    1000ms
    内存
    128MiB
    难度
    4
    标签
    递交数
    114
    已通过
    56
    上传者