社区讨论
BFS做法大规模MIE求调
P1135奇怪的电梯参与者 2已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @mlmjch4x
- 此快照首次捕获于
- 2026/02/15 00:33 4 天前
- 此快照最后确认于
- 2026/02/18 22:50 13 小时前
前排预警:
码风极其诡异,还望各位大佬好好调教awa
(洛谷不常在线,有些回复不能很及时看到,望谅解)
CPP#include<bits/stdc++.h>
using namespace std;
int pass[205],_floor[205];\\pass用于记载按了多少次电梯,_floor用于记载某层电梯可运行层数
int main(){
memset(pass,-1,sizeof(pass));\\初始化,假设均不可以到达
ios::sync_with_stdio(0);
int n,a,b,h;
cin>>n>>a>>b;
for(int i=1;i<=n;i++){
cin>>_floor[i];
}
pass[a]=0;\\a到a不需要按电梯
queue<int> floor_,pass_;\\分别建立两个队列floor_与pass_,前者用于记录BFS的楼层,后者用于表示按了多少次电梯
if(a+_floor[a]<=n){
floor_.push(a+_floor[a]);
pass_.push(pass[a]+1);
}
if(a-_floor[a]>=1){
floor_.push(a-_floor[a]);
pass_.push(pass[a]+1);
}\\先将所在楼层可抵达的两层入队进行搜索
while(!floor_.empty()){\\栈空时表示无法搜索可结束
h=floor_.front();
pass[h]=pass_.front();\\表示到达h层时所按电梯次数
if(h+_floor[h]<=n&&pass[h+_floor[h]]==-1){
floor_.push(h+_floor[h]);
pass_.push(pass[h]+1);
}
if(h-_floor[h]>=1&&pass[h-_floor[h]]==-1){
floor_.push(h-_floor[h]);
pass_.push(pass[h]+1);
}
pass_.pop();
floor_.pop();
if(pass[b]!=-1)break;\\如果结论出来了就终止吧
}
cout<<pass[b];
return 0;
}
回复
共 7 条回复,欢迎继续交流。
正在加载回复...