https://blog.youkuaiyun.com/loser_peter/article/details/80258321 网站一
https://www.cnblogs.com/1starfish/p/9403991.html 网站二
https://blog.youkuaiyun.com/acm147258369/article/details/88562558 网站三(图形解释最形象最推荐的)
再来一道hdoj2717 的简单bfs题(Libm版)
#include<bits/stdc++.h>
using namespace std;
bool vis[100050];
int N,K;
struct NODE{
int loc;
int step;
};
int bfs()
{
memset(vis,0,sizeof(vis));
queue<NODE> q;
vis[N]=true;
q.push(NODE{N,0});
while(!q.empty())
{
NODE t;
t=q.front();
q.pop();
if(t.loc==K) return t.step;
if(t.loc<K&&!vis[t.loc+1]) {vis[t.loc+1]=1;q.push(NODE{t.loc+1,t.step+1});}
if(t.loc>0&&!vis[t.loc-1]) {vis[t.loc-1]=1;q.push(NODE{t.loc-1,t.step+1});}
if(2*t.loc<100005&&!vis[2*t.loc]) {vis[t.loc*2]=1;q.push(NODE{t.loc*2,t.step+1});}
}
}
int main()
{
while(cin>>N>>K){
if(K>=N){
cout<<bfs()<<endl;
}else{
cout<<abs(N-K)<<endl;
}
}
return 0;
}