http://ybt.ssoier.cn:8088/problem_show.php?pid=1360
/*
1360:奇怪的电梯(lift)--AC
http://ybt.ssoier.cn:8088/problem_show.php?pid=1360
*/
#include <bits/stdc++.h>
using namespace std;
int que[300][2];
int num[210];
int main( void )
{int n,a,b;cin>>n>>a>>b;int head,tail;int tempx,tempy,nx;bool flag[210];memset(flag,false,sizeof(flag));for(int i=1;i<=n;++i){//每层的数字 cin>>num[i];}//从当前层到当前层 if( a == b ) {cout<<0<<endl;return 0;}head=0;tail=1;que[tail][0]=a;que[tail][1]=0;//step//flag表示已经走过 flag[a]=true;while( head != tail){//出队 ++head;tempx=que[head][0];tempy=que[head][1];for(int i=-1;i<=1;++i){if( i != 0 ){nx=tempx+num[tempx]*i;//nx>n 上溢//nx<1 下溢//flag[nx] 表示已经走过 if( nx>n || nx<1 || flag[nx] ) continue;//break 跳出本层循环//continue:跳出本次循环if( nx == b ){cout<<tempy+1<<endl;return 0; }//入队 ++tail;que[tail][0]=nx;que[tail][1]=tempy+1;//flag[nx] 标记为已经走过flag[nx]=true; }}}cout<<-1<<endl;return 0;
}