赵乐ACM

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.思路果然清晰了,十分钟搞定


#include <stdio.h>
#include <queue>
#include <iostream>
#include <cstring>

using namespace std;

int n, k;
queue <int> q;
int step[100010];

int bfs(int a)
{
    if(a == k)
        return step[k];
    else
    {
        if(a - 1 >= 0 && step[a - 1] == 0)
        {
            step[a - 1] = step[a] + 1;
            q.push(a - 1);
        }
        if(a + 1 <= 100000 && step[a + 1] == 0)
        {
            step[a + 1] = step[a] + 1;
            q.push(a + 1);
        }
        if(a * 2 <= 100000 && step[a * 2] == 0)
        {
            step[a * 2] = step[a] + 1;
            q.push(a * 2);
        }
        int temp = q.front();
        q.pop();
        bfs(temp);
    }

}

int main()
{
    while(scanf("%d%d", &n, &k) != EOF)
    {
        memset(step, 0, sizeof(step));
        bfs(n);
        cout << step[k] << endl;
    }
    return 0;
}


posted on 2012-03-12 20:22  赵乐ACM  阅读(203)  评论(0编辑  收藏  举报