题目连接
http://poj.org/problem?id=3278
输入
5 17
结果
4
农民约翰到达逃犯牛最快的方式是沿着以下路径:5-10-9-18-17,需要4分钟。
(1).向后-1 (2).向前+1 (3).向前2*x
广度优先搜索练习,BFS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
#define maxn 100010
using namespace std;
int s[maxn],v[maxn];
queue<int>Q;
int BFS(int n,int k)
{
int start,step;
Q.push(n);
v[n]=1;
s[n]=0;
while(!Q.empty())
{
start=Q.front();
Q.pop();
for(int i=0; i<=2; i++)
{
if(i==0)
step=start-1;
else if(i==1)
step=start+1;
else if(i==2)
step=start*2;
if(step>=maxn || step<0)
continue;
if(!v[step])
{
Q.push(step);
v[step]=1;
s[step]=s[start]+1;
}
if(step==k)
return s[step];
}
}
}
int main()
{
int n,k;
scanf("%d%d",&n,&k);
if(n>=k)
printf("%d\n",n-k);
else
printf("%d\n",BFS(n,k));
return 0;
}