社区讨论
ki = 0时有什么意义,卡在那一层不能上不能下吗
P1135奇怪的电梯参与者 4已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lodua9h8
- 此快照首次捕获于
- 2023/10/31 12:39 2 年前
- 此快照最后确认于
- 2023/11/07 02:38 2 年前
CPP
#include <bits/stdc++.h>
using namespace std;
queue<int> q;
int dir[210];//当前层可走的步数
int bu[210];//记录每层的步数
bool f[210];//表示每层是否访问
int main()
{
int n,a,b;
cin>>n>>a>>b;//层数,开始位置,终止位置
if(a == b){
}
for(int i = 1;i <= n;i++){
cin>>dir[i];
}
memset(bu, -1, sizeof(a));
memset(f, false, sizeof(f));
bu[a] = 0;
f[a] = true;
q.push(a);
while(!q.empty()){
int x = q.front();
q.pop();
if (x == b) break; //没有加跳出,把所有的点全部都算出来了,白白浪费时间
if(dir[x] == 0) continue;//当前楼层只能走0步
if(x+dir[x]<=n && !f[x+dir[x]]){//忘记判断是否访问过,瞎几把搜
f[x+dir[x]] = true;
bu[x+dir[x]] = bu[x]+1;
q.push(x+dir[x]);
//cout<<"+"<<endl;
}
if(x-dir[x]>=1 && !f[x-dir[x]]){
//cout<<x-dir[x]<<endl;
f[x-dir[x]] = true;
bu[x-dir[x]] = bu[x]+1;
q.push(x-dir[x]);
//cout<<"-"<<endl;
}
//cout<<q.front()<<endl;
}
if(a == b){
cout<<0<<endl;
return 0;
}
/*if(bu[b] != 0)//bu初始化是-1,结果为0代表着只走了一步就达到终点
cout<<bu[b]<<endl;
else
cout<<-1<<endl;*/
cout<<bu[b]<<endl;
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...