在这道题中
状态是数轴的下标
拓展状态的方法就是2*x x+1 x-1
边界条件就是下标<0或者大于1e5或是遍历过
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e5+1e4,M=1e3+1e2;
const ll Maxn=0x3ffffff,Minm=-0x3ffffff;
ll a,b;
ll m[N];
ll visted[N];//标记是否遍历过
struct node
{
ll x,t;//x为下标,t为时间
}que[N];
void bfs()
{
ll tou=0,wei=1;
que[0].x=a,que[0].t=0,visted[a]=true;
while(tou<wei)
{
for(ll i=1;i<=3;i++)
{
ll xx,tt;
if(i==1)xx=que[tou].x+1,tt=que[tou].t+1;
if(i==2)xx=que[tou].x-1,tt=que[tou].t+1;
if(i==3)xx=que[tou].x*2,tt=que[tou].t+1;
//拓展方法
if(xx<0||xx>100000||visted[xx]==true)continue;
if(xx==b)//边界条件
{
cout<<tt;
exit(0);
}
visted[xx]=true;
que[wei].x=xx;
que[wei].t=tt;
wei++;
}
tou++;
}
}
signed main()
{
cin>>a>>b;
if(a==b)cout<<"0";//记得特判哦
else bfs();
}