【openjudge】抓住那头牛

描述

农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:

1、从X移动到X-1或X+1,每次移动花费一分钟
2、从X移动到2*X,每次移动花费一分钟

假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?


输入 两个整数,N和K 输出 一个整数,农夫抓到牛所要花费的最小分钟数 样例输入
5 17
样例输出
4


犯了一个我认为比较有意义的错误:广搜中必须要出队之后达到目标再输出。否则提前输出可能会因为没判断入队条件而出错

【代码】

#include
#include
#include
#define MAX 100000
using namespace std;
struct hp{
	int num,step;
}queue[100005];
int n,m,head,tail,now,step,ans;
bool b[100005];
int main(){
	scanf("%d%d",&n,&m);ans=MAX;
	head=0,tail=1;
	queue[tail].num=n,queue[tail].step=0,b[n]=true;
	while (head=0&&!b[now-1]) b[now-1]=true,queue[++tail].num=now-1,queue[tail].step=step+1;
		if (now*2<=MAX&&!b[now*2]) b[now*2]=true,queue[++tail].num=now*2,queue[tail].step=step+1; 
	}
}



你可能感兴趣的:(题解,搜索)