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;
}