1、扩展过的数值无需再扩展
2、待扩展数值大于0时才可以进行 -1 扩展3、待扩展数值比k大时只能进行 -1 扩展
#include <iostream>
#include <queue>
using namespace std;
struct pos
{
int data;
int time;
};
int main()
{
int N,K;
queue<pos> Q;
pos p;
int record[500005]={0};
cin >> N >> K;
p.data=N;
p.time=0;
Q.push(p);
record[p.data]=1;
while (Q.front().data!=K)
{
p.data=Q.front().data+1;
p.time=Q.front().time+1;
if (!record[p.data] && Q.front().data<K)
{
Q.push(p);
record[p.data]=1;
}
p.data=Q.front().data-1;
p.time=Q.front().time+1;
if (!record[p.data] && Q.front().data>0)
{
Q.push(p);
record[p.data]=1;
}
p.data=Q.front().data*2;
p.time=Q.front().time+1;
if (!record[p.data] && Q.front().data<K)
{
Q.push(p);
record[p.data]=1;
}
Q.pop();
}
cout << Q.front().time << endl;
return 0;
}