📄 1548 a strange lift.cpp
字号:
#include <cstdio>
#include <string>
#include <queue>
using namespace std;
int n,a,b,k[201];
bool v[201];
struct infor
{
int lev,t;
void up()
{
lev+=k[lev];
t++;
}
void down()
{
lev-=k[lev];
t++;
}
bool isOkay()
{
if(lev<1 || lev>n || v[lev])
return false;
return true;
}
bool isEnd()
{
if(lev==b)
return true;
else
return false;
}
};
queue<infor> SQ;
infor ans;
void bfs()
{
int i;
infor now,ct;
while(!SQ.empty())
{
now=SQ.front();
SQ.pop();
v[now.lev]=true;
if(now.isEnd())
{
ans=now;
return ;
}
ct=now;ct.up();
if(ct.isOkay())
SQ.push(ct);
ct=now;ct.down();
if(ct.isOkay())
SQ.push(ct);
}
}
int main()
{
int i,j;
infor it;
while(scanf("%d",&n)==1 && n)
{
scanf("%d %d",&a,&b);
memset(v,0,sizeof(v));
for(i=1;i<=n;i++)
scanf("%d",&k[i]);
while(!SQ.empty())
SQ.pop();
it.lev=a;
it.t=0;
ans.t=-1;
SQ.push(it);
bfs();
printf("%d\n",ans.t);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -