标签:teleport ima 问题 tran hint nbsp number eps min
链接:http://poj.org/problem?id=3278
题目:
Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer John has two modes of transportation: walking and teleporting.
* Walking: FJ can move from any point X to the points X - 1 or X + 1 in a single minute
* Teleporting: FJ can move from any point X to the point 2 × X in a single minute.
If the cow, unaware of its pursuit, does not move at all, how long does it take for Farmer John to retrieve it?
Input
Output
Sample Input
5 17
Sample Output
4
Hint
#include <cstdio> #include<queue> #include<cstring> #define position 100005 using namespace std; int n,k; struct num//定义结构体表示每一个位置 { int x;//位置坐标 int step;//走到这一步的步数(我们将时间转换为步数理解,每一步需要一分钟) }; bool visit[position];//标记,判断是否走过 void bfs() { queue<num> steps;//定义队列存储位置 num start,now,next;//start=起点,now=前的位置,next=下一步的位置 memset(visit,false,sizeof(visit));//初始化标记(false表示未走过) start.x=n;//初始化起点 start.step=0; steps.push(start);//起点入队 visit[start.x]=true;//标记起点(表示走过) while(!steps.empty()) { now=steps.front();//取队列首元素表示当前位置 steps.pop();//首元素出列 if(now.x==k)//如果当前位置就是牛的位置(得到结果)输出步数,退出调用函数 { printf("%d\n",now.step); return; } for(int i=0;i<3;i++) { if(i==0) next.x=now.x+1; else if(i==1) next.x=now.x-1; else if(i==2) next.x=now.x*2;//对三种方法进行判定
if(next.x>=0&&next.x<position&&!visit[next.x]) { visit[next.x]=true;//表示走过了 next.step=now.step+1;//步数加一 steps.push(next);//入队 } } } } int main() { scanf("%d %d",&n,&k); bfs(); return 0; }
注意范围
标签:teleport ima 问题 tran hint nbsp number eps min
原文地址:https://www.cnblogs.com/sidenynb/p/12230438.html