还以为会超时。。。
bfs代码:
#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
using namespace std;
struct p
{
int i; //位置
int j; //步数
};
queue <struct p> q;
int n , k;
int v;
const int maxn = 200000;
int vis[maxn];
void bfs(int i)
{
struct p now;
now.i = i;
now.j = 0;
q.push(now);
vis[now.i] = 1;
while(!q.empty())
{
now = q.front();
q.pop();
if(now.i == k)
{
if(now.j < v || v == -1) v = now.j;
}
else
{
struct p now1;
now1 = now;
if(now.i + 1 >= 0 && now.i + 1 <= maxn && !vis[now.i + 1])
{
now1.i ++;
now1.j ++;
q.push(now1);
vis[now1.i] = 1;
}
now1 = now;
if(now.i - 1 >= 0 && now.i - 1 <= maxn && !vis[now.i - 1])
{
now1.i --;
now1.j ++;
q.push(now1);
vis[now1.i] = 1;
}
now1 = now;
if(2 * now.i>= 0 && 2 * now.i <= maxn && !vis[now.i * 2])
{
now1.i *= 2;
now1.j ++;
q.push(now1);
vis[now1.i] = 1;
}
}
}
}
int main()
{
scanf("%d%d",&n, &k);
v = -1;
memset(vis,0,sizeof(vis));
bfs(n);
printf("%d",v);
}