有一个怪异的楼梯,每一层只能选择上或者下两种按键,求从起点到终点最少的按键次数!简单的bfs! http://acm.hdu.edu.cn/showproblem.php?pid=1548
#include <iostream>
#include <cstdio>
#include <queue>
#include <string.h>
#define N 205
using namespace std;
int a[N],s,e,n,f[N],flag;
int jump[2]={-1,1};
struct node
{
int x,step;
}q,p,r;
void init()
{
flag=0;
cin>>s>>e;
for(int i=1;i<=n;i++)
cin>>a[i];
memset(f,0,sizeof(f));
}
int is_b(struct node p)
{
if(p.x<1 || p.x>n || f[p.x]) return 1;
return 0;
}
void bfs()
{
queue<node> que;
q.x=s;q.step=0;
f[q.x]=1;
que.push(q);
while(!que.empty())
{
q=que.front();que.pop();
for(int k=0;k<2;k++)
{
p.x=q.x+a[q.x]*jump[k];
if(is_b(p)) continue;
f[p.x]=1;
p.step=q.step+1;
if(p.x==e)
{
flag=1;
cout<<p.step<<endl;
return;
}
que.push(p);
}
}
}
int main ()
{
//freopen("s.txt","r",stdin);
while(cin>>n)
{
if(!n) break;
init();
if(s==e)
{
cout<<0<<endl;
continue;
}
bfs();
if(!flag) cout<<-1<<endl;
}
return 0;
}