题目连接:http://poj.org/problem?id=3278
语言:默认 赶上那头牛
描述 农夫约翰已被告知逃亡牛的位置,并希望立即抓住她。他开始于一个点Ñ(0≤ Ñ ≤100,000)上的数线和牛是在点ķ(0≤ ķ上相同数目的线≤100,000)。农夫约翰有两种交通方式:步行和传送。 *行走:FJ可以在一分钟内从任意点X移动到X -1或X + 1 点 如果母牛不知道它的追求,根本不动,那么农夫约翰需要多长时间才能找回它? 输入 第1行:两个以空格分隔的整数:N和K. 产量 第1行:Farmer John捕捉逃亡牛所需的最短时间(以分钟为单位)。 样本输入 样本输出 |
思路:bfs 用到了队列
#include<iostream>
#include<algorithm>
#include<fstream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<string>
#include<cmath>
#include<cctype>
#include<vector>
#include<limits.h>
#include<queue>
using namespace std;
const int maxn=1e5+5;
int n,m;
int vis[maxn];
struct mmp
{
int x,step;
mmp(int a,int b):x(a),step(b) { }
};
queue<mmp>q1;
void bfs()
{
int c1,i;
while(q1.empty()==0)
{
mmp m1=q1.front();
q1.pop();
if(m1.x==m)
{
cout<<m1.step<<endl;
break;
}
for(i=0; i<3; ++i)
{
if(i==0)
c1=m1.x+1;
else if(i==1)
c1=m1.x-1;
else
c1=2*m1.x;
if(c1<0||c1>maxn)
continue;
if(vis[c1]==0)
{
vis[c1]=1;
q1.push(mmp(c1,m1.step+1));
}
}
}
}
int main()
{
scanf("%d%d",&n,&m);
q1.push(mmp(n,0));
bfs();
return 0;
}