电梯里的BFS
**
样例输入
5 1 5
3 3 1 2 5
0
样例输出
3
**
#include<iostream>
#include<queue>
using namespace std;
int main()
{
int N,A,B,t;//t用来标记样例的组数
int k[210];
int flag[100001];//到达的最少步数
queue<int> q;
cin>>N;
while(N)
{
cin>>A>>B;
for(int i=1;i<=N;i++)
{
cin>>k[i];//每一层按按钮之后移动的层数
flag[i]=-1;//用来标记是否到达过
}
flag[A]=0;//从a开始,所以是0
q.push(A);
while(!q.empty())
{
int p=q.front();
//cout<<b<<" ";
q.pop();//取队首的层数作为当前层数
if(p==B)//层数到达
break;
if(p+k[p]<=N&&flag[p+k[p]]==-1)//判断上升时是否到达过并且越界
{
flag[p+k[p]]=flag[p]+1;
q.push(p+k[p]);
}
//cout<<"hi";
if(p-k[p]>=1&&flag[p-k[p]]==-1)//判断下降时是否到达过并且越界
{
flag[p-k[p]]=flag[p]+1;
q.push(p-k[p]);
}
}
cin>>N;
cout<<flag[B]<<endl;//没到达输出-1
while(!q.empty())
q.pop();
}
return 0;
}