andre_joy

导航

hdu 2717

地址:http://acm.hdu.edu.cn/showproblem.php?pid=2717

题意:三种走法+1,-1,*2,最少几步到指定点。

mark:wa了好多次。bfs算法,注意临界条件。

代码:

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

int a[100010],d[100010],n,k;

void bfs()
{
    int front = 0,rear = 1,nn;
    a[0] = n;
    d[n] = 0;
    while(front != rear)
    {
        nn = a[front++];
        if(nn == k) return ;
        if(nn < 100000 && !d[nn+1]) a[rear++] = nn+1, d[nn+1] = d[nn]+1;
        if(nn > 0 && !d[nn-1]) a[rear++] = nn-1, d[nn-1] = d[nn]+1;
        if(nn*2 <= 100000 && !d[nn*2]) a[rear++] = nn*2, d[nn*2] = d[nn]+1;
    }
}

int main()
{
    while(~scanf("%d%d", &n, &k))
    {
        memset(d, 0, sizeof(d));
        bfs();
        printf("%d\n", d[k]);
    }
    return 0;
}

posted on 2012-07-12 22:08  andre_joy  阅读(188)  评论(0编辑  收藏  举报