简单BFS 、
自己以前用了好多方法 发现还是多看别人的简洁 高效代码 为好、
用STL queque 实现
#include <iostream>
#include <queue>
using namespace std;
int d[100001],hash[100001]; //深度 和 是否被访问过
int main()
{
queue<int> p;
int n,m,tmp;
cin>>n>>m;
p.push(n); //向队列位加入元素
d[n]=0;
while(p.size()>0)
{
tmp=p.front(); //取的队列头元素
if(tmp==m) break;
p.pop(); //删除队列头元素
hash[tmp]=1;
if(tmp+1<=100000&&hash[tmp+1]==0)
{
p.push(tmp+1);
d[tmp+1]=d[tmp]+1;
hash[tmp+1]=1;
}
if(tmp-1>=0&&hash[tmp-1]==0)
{
p.push(tmp-1);
d[tmp-1]=d[tmp]+1;
hash[tmp-1]=1;
}
if(tmp*2<=100000&&hash[tmp*2]==0)
{
p.push(tmp*2);
d[tmp*2]=d[tmp]+1;
hash[tmp*2]=1;
}
}
cout<<d[tmp]<<endl;
}