POJ-3278-Catch That Cow-广搜(BFS)
这是一道广搜的模板题,我就不解释了。直接看代码;
#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<queue>
#include<map>
#include<stack>
#include<set>
#include<vector>
#include<algorithm>
#define LL long long
#define MAXN 100000
using namespace std;
int vis[MAXN+10],n,k;
struct node
{
int x,s;
node(int xx,int sx):x(xx),s(sx){ } // 结构体函数,初始化。
};
void bfs(int n)
{
queue<node>q;
q.push(node(n,0)); // 将起始点入队。
vis[n]=1;
while(!q.empty()){
node next=q.front();
q.pop();
if(next.x==k){ // 说明找到了。。。
printf("%d\n",next.s);
return;
}
if((next.x+1)<=MAXN&&!vis[next.x+1]) q.push(node(next.x+1,next.s+1)), vis[next.x+1]=1; // 三种情况,可行则分别入队;并标记。
if((next.x-1)>=0&&!vis[next.x-1]) q.push(node(next.x-1,next.s+1)), vis[next.x-1]=1;
if((next.x*2)<=MAXN&&!vis[next.x*2]) q.push(node(next.x*2,next.s+1)), vis[next.x*2]=1;
}
return;
}
int main()
{
while(~scanf("%d%d",&n,&k)){
memset(vis,0,sizeof(vis));
bfs(n);
}
return 0;
}
浙公网安备 33010602011771号