洛谷P1135奇怪的电梯题解
#include<iostream>
#include<queue>
using namespace std;
struct node{
int up,down,step;//向上,向下,步数
bool visit;//标记是否访问该楼层
}o[210];
int main()
{
int n,a,b,temp;
cin >> n>>a>>b;
for(int i=1;i<=n;i++)
{
cin >> temp;//输入楼层上的数字
o[i].up=i+temp;//向上走到的楼层
o[i].down=i-temp;//向下走到的楼层
o[i].step=-1;//每层楼初始的步数
o[i].visit=false;//每层楼的初始访问状态
}
queue<node> q;
o[a].step=0;
o[a].visit=true;
q.push(o[a]);
while(!q.empty())
{
node temp=q.front();
q.pop();
int u=temp.up,d=temp.down;
if(u>=1&&u<=n&&o[u].visit==false)//向上到达的楼层在条件范围并且没访问过将会有以下操作
{
o[u].visit=true;//标记该楼层已访问过了
o[u].step=temp.step+1;
q.push(o[u]);
}
if(d>=1&&d<=n&&o[d].visit==false)//向下到达的楼层在条件范围并且没访问过将会有以下操作
{
o[d].visit=true;
o[d].step=temp.step+1;
q.push(o[d]);
}
if(u==b||d==b)break;//等于想要的目标,打破循环
}
cout << o[b].step ;
return 0;
}