简单搜索--BFS--Catch That Cow

简单搜索–BFS–Catch That Cow

Description
农夫约翰已被告知一头逃亡牛的下落,并希望立即抓住她。他从某一时刻开始N(0≤)N(≤100,000)在一个数字线上,母牛在一个点上K(0≤)K(≤100,000)在相同的数字线上。农民约翰有两种运输方式:步行和传送。

*步行:可以从任何地方移动X各点X -1或X 一分钟内+1
*传送:可以从任何地方移动X点2×X一分钟之内。

如果母牛没有意识到它的追求,根本不动,农场主约翰需要多长时间才能找回它?

Input
第1行:两个空格分隔的整数:N和K

Output
第1行:最短的时间,在几分钟内,农夫约翰就能抓住逃亡的母牛。

Sample Input
5 17
Sample Output
4
简单的bfs问题,每次进队列列好每一种情况,再进队,传递好时间,就OK

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <math.h>
#include <string.h>
#include <string>
#include <stack>
#include <queue>
#include <map>

using namespace std;
const int inf=0x3f3f3f3f;
const int MAX=100000+5;
int vla[MAX];
int N,K;

int bfs()
{
	queue <int> q;
	q.push(N);
	while(!q.empty())
	{
		int a=q.front();
		q.pop();
		int b=a-1;
		int c=a+1;
		int d=a*2;
		if(b>0&&b<MAX&&!vla[b])	vla[b]=vla[a]+1,q.push(b);
		if(c<=MAX&&!vla[c])	    vla[c]=vla[a]+1,q.push(c);
		if(d<=MAX&&!vla[d])	    vla[d]=vla[a]+1,q.push(d);
		if( b==K || c==K || d==K )	return 0;
	}
}
int main()
{
	while(cin>>N>>K)
	{
		memset(vla,0,sizeof(vla));
		if(N>=K)
		{
			cout<<N-K<<endl;
			continue;
		}
		bfs();
		cout<<vla[K]<<endl;
	}
	return 0;
}
发布了19 篇原创文章 · 获赞 0 · 访问量 215

猜你喜欢

转载自blog.csdn.net/qq_45282116/article/details/104429234