题解
2024-01-26 19:24:11
发布于:浙江
39阅读
0回复
0点赞
造福后代
#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;
}
全部评论 1
抄挺快呀牢底(
2024-05-07 来自 广东
0???
2024-05-31 来自 浙江
0
有帮助,赞一个