题目链接:http://poj.org/problem?id=3278
这是一道广搜的模板题,我就不解释了,直接看代码;
#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; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
POJ-3278-Catch That Cow-广搜(BFS)
原文地址:http://blog.csdn.net/wlxsq/article/details/46998353