题目思路:
bfs的模板题 戳我戳我
题目代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#define maxn 1000000
using namespace std;
int vis[maxn];
struct COO
{
int pos;
int tim;
}start,mid,nxt;
queue<COO>q;
int main(void)
{
int n,k;
//int flag;
while(~scanf("%d%d",&n,&k))
{
if(n>=k)
{
printf("%d\n",n-k);
continue;
}
memset(vis,0,sizeof(vis));
while(!q.empty())
q.pop();
//flag=1;
//int over=abs(n-k);
start.pos=n;
start.tim=0;
vis[n]=1;
q.push(start);
while(!q.empty())
{
mid=q.front();
q.pop();
if(mid.pos==k)
{
//flag=0;
printf("%d\n",mid.tim);
break;
}
for(int i=0;i<3;i++)
{
int nx;
switch(i)
{
case 0:nx=mid.pos-1;break;
case 1:nx=mid.pos+1;break;
case 2:nx=mid.pos*2;break;
}
if(nx<maxn&&nx>=0&&!vis[nx])
{
nxt.pos=nx;
nxt.tim=mid.tim+1;
vis[nx]=1;
q.push(nxt);
}
}
}
}
return 0;
}
呼呼