标签:ret pre == cout std ++i void 上下 题目
//超·远古时期·恐龙时代の码风
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#define ll long long
#define ull unsigned long long
#define For(i,a,b) for(register unsigned long long i=(a);i<(b);++i)
#define Rep(i,a,b) for(register unsigned long long i=(a);i>=(b);--i)
using namespace std;
ll n,a,b,s,m[210];
ll pd[210];
queue<ll> k,step;//k记录楼层,step记录步数
void bfs(){
k.push(a);
step.push(0);//进队列
pd[a]=1;//标记A楼层已经到过
while(k.size()){
ll len=k.size();
For(i,0,len){
s=k.front();
ll step_=step.front();//记录一下
if(s==b){//若是到了B层楼
cout<<step_;//输出
return;//结束
}
if(s-m[s]>0&&pd[s-m[s]]!=1){//若下楼的层数合法且没去过
k.push(s-m[s]);
step.push(step_+1);//进队列
pd[s-m[s]]=1;//标记
}
if(s+m[s]<=n&&pd[s+m[s]]!=1){//若上楼的层数合法且没去过
k.push(s+m[s]);
step.push(step_+1);//进队列
pd[s+m[s]]=1;//标记
}
k.pop();step.pop();//出队列
}
}
}
int main(){
cin>>n>>a>>b;
For(i,1,n+1)cin>>m[i];//输入
bfs();
if(s!=b)cout<<-1;//若还是没到B层楼,输出-1
return 0;
}
标签:ret pre == cout std ++i void 上下 题目
原文地址:https://www.cnblogs.com/FUXyao/p/12885817.html