怪异的楼梯

来源:互联网 发布:js时间戳转换 编辑:程序博客网 时间:2024/05/19 01:06

有一个怪异的楼梯,每一层只能选择上或者下两种按键,求从起点到终点最少的按键次数!简单的bfs! http://acm.hdu.edu.cn/showproblem.php?pid=1548

#include <iostream>#include <cstdio>#include <queue>#include <string.h>#define N 205using 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;}