全部评论 2

  • #include<bits/stdc++.h>
    using namespace std;
    int d[210],k[210];
    int main(){
    int N,A,B;
    cin>>N>>A>>B;
    for(int i=1;i<=N;i++){
    cin>>k[i];
    }
    // 将从A点到每一个点的距离初始化为-1
    memset(d,-1,sizeof(d));
    // 将A点到A点的距离初始化为0,定义队列将A点压入队列
    d[A]=0;
    queue<int>q;
    q.push(A);
    while(q.size()){
    int r=q.front();
    q.pop();
    // 如果当前电梯按向上的按钮并不超出边界,并且位置未到达过
    // 将当前位置按钮次数更新并将位置压入队列
    if(r+k[r]<=N && d[r+k[r]]==-1){
    d[r+k[r]]=d[r]+1;
    q.push(r+k[r]);
    }
    // 如果当前电梯按向下的按钮并不超出边界,并且位置未到达过
    // 将当前位置按钮次数更新并将位置压入队列
    if (r - k[r] >= 1 && d[r - k[r]] ==-1 ) {
    d[r - k[r]] = d[r] + 1;
    q.push(r-k[r]);
    }
    }
    // 输出到达B位置需要的按钮次数
    cout<<d[B];
    return 0;
    }

    2025-12-20 来自 四川

    0
  • 抄挺快呀牢底(

    2024-05-07 来自 广东

    0
暂无数据

提交答案之后,这里将显示提交结果~

首页