您的位置:首页 > 其它

HDU_1548_AStrangeLift

2015-07-25 16:53 225 查看
bfs即可每个楼梯有两种情况

#include <iostream>
#include <stdio.h>
#include <queue>
#include <string.h>
using namespace std;

const int M=205;

int fl[M];

int isu[M];

queue<int>re;

void clearu()              //清空
{
for(int i=0;i<M;i++)     //这里的范围记得改;
{
isu[i]=0;
}
}

void bfs(int sx,int ex,int n)
{
while(!re.empty())
re.pop();

re.push(sx);
isu[sx]=1;

while(!re.empty())
{
int t=re.front();
re.pop();
int tmp=t+fl[t];                  //常用的表达式设为变量
if(1<=tmp&&tmp<=n&&!isu[tmp])
{
re.push(tmp);
isu[tmp]=isu[t]+1;
if(tmp==ex)
return;
}
tmp=t-fl[t];
if(1<=tmp&&tmp<=n&&!isu[tmp])
{
re.push(tmp);
isu[tmp]=isu[t]+1;
if(tmp==ex)
return;
}
}
}

int main()
{
int n;
int a,b;
while(scanf("%d",&n)!=EOF)
{
clearu();
if(!n)
break;
scanf("%d%d",&a,&b);
for(int i=1;i<=n;i++)
{
scanf("%d",&fl[i]);
}

bfs(a,b,n);
printf("%d\n",isu[b]-1);     //涵盖了不可能的情况

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: