hdu 1548 A strange lift

//是pku3278 Catch That Cowr的翻版

#include <stdio.h>
#include <string.h>

#define MAXSIZE 210

int N,A,B,number[MAXSIZE],queue[MAXSIZE],step[MAXSIZE],front,rear;
void bfs()
{
    while(front<rear)
    {
        int next,f=queue[++front];
        if(f==B)
        {
            printf("%d\n",step[f]);
            return;
        }
        next=f+number[f];
        if(next <= N && !step[next])
        {
            queue[++rear]=next;
            step[next]=step[f]+1;
        }
        next=f-number[f];
        if(next>0 && !step[next])
        {
            queue[++rear]=next;
            step[next]=step[f]+1;
        }
    }
    printf("-1\n");
}

int main()
{
    while(scanf("%d",&N),N)
    {
        scanf("%d%d",&A,&B);
        for(int i=1; i<=N; i++) scanf("%d",&number[i]);
        memset(step,0,sizeof(step));
        front=rear=-1;
        queue[++rear]=A;
        bfs();
    }
    return 0;
}

 

posted @ 2010-08-18 13:53  菜到不得鸟  阅读(173)  评论(0)    收藏  举报