//poj 3278 BFS
//AC 2014/1/24
#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN=100001;
queue<int> que;
int vis[MAXN];
int N,K;
int time;
bool in(int n)
{
if(n>=0 && n<=MAXN )
return true;
return false;
}
int BFS()
{
int t;
while(!que.empty())
{
t=que.front();
que.pop();
time=que.front();
que.pop();
if(t==K)return time;
//if((t-1)>=0 || (t+1)<=MAXN || (2*t)<=MAXN)
if(in(t-1) && !vis[t-1])
{
que.push(t-1);
vis[t-1]=1;
que.push(time+1);
//++time;
//continue;
}
if(in(t+1) && !vis[t+1])
{
que.push(t+1);
vis[t+1]=1;
que.push(time+1);
//continue;
//++time;
}
if(in(2*t) && !vis[2*t])
{
que.push(t*2);
vis[t*2]=1;
//++time;
que.push(time+1);
//continue;
}
}
return time;
}
int main()
{
//cout << "Hello world!" << endl;
//freopen("input.txt","r",stdin);
while(scanf("%d %d",&N,&K)!=EOF)
{
memset(vis,0,sizeof(vis));
time=0;
que.push(N);
que.push(time);
vis[N]=1;
time=BFS();
cout<<time<<endl;
}
//fclose(stdin);
return 0;
}
poj 3278 BFS
最新推荐文章于 2020-03-08 22:05:43 发布