这题和1548没啥区别,但是中间还是出现了几波迷之错误
链接:点击打开链接
AC代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#define MM(x,y) memset(x,y,sizeof(x))
typedef long long ll;
using namespace std;
const int N=1000000;
int a[N];
struct node{
int x;
ll step;
};
queue<node>Q;
int vis[N];
int n,k;
bool check(int x)
{
if(x>=0&&x<=N&&!vis[x])
return 1;
else
return 0;
}
int bfs()
{
node now,next;
int i;
now.step=0;
now.x=n;
Q.push(now);
vis[n]=1;
while(!Q.empty())
{
now=Q.front();
Q.pop();
if(now.x==k)
return now.step;
next.x=now.x*2;
if(check(next.x))
{
next.step=now.step+1;
Q.push(next);
vis[next.x]=1;
}
next.x=now.x+1;
if(check(next.x))
{
next.step=now.step+1;
Q.push(next);
vis[next.x]=1;
}
next.x=now.x-1;
if(check(next.x))
{
next.step=now.step+1;
Q.push(next);
vis[next.x]=1;
}
}
return -1;
}
int main()
{
int i,j,sum;
while(cin>>n>>k)
{
while(!Q.empty())
{
Q.pop();
}
MM(vis,0);
cout<<bfs()<<endl;
}
return 0;
}