poj 3787 cat that cow

来源:互联网 发布:sql正则 编辑:程序博客网 时间:2024/06/12 00:22

 Catch That Cow

时间限制: 4 Sec  内存限制: 66 MB
提交: 22  解决: 5
[提交][状态][讨论版]

题目描述

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 - 1 or + 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?

输入

Line 1: Two space-separated integers: N and K

输出

Line 1: The least amount of time, in minutes, it takes for Farmer John to catch the fugitive cow.

样例输入

5 17

样例输出

4
AC代码(bfs)

#include<stdio.h>#include<string.h>typedef struct Queue {int x;int step;}Queue;Queue queue[20001];int visit[20001];void bfs(int n,int k) {int front = 0;int rear = 0;queue[n].x = n;queue[rear++].step = 0;visit[n] = 1;while(front < rear) {Queue q = queue[front++];if(q.x == k) {printf("%d\n",q.step);}if(q.x - 1 >= 0 && !visit[q.x - 1])          {              visit[q.x] = 1;              queue[rear].x = q.x - 1;              queue[rear++].step = q.step + 1;          }          if(q.x <= k && !visit[q.x+1]) {              visit[q.x+1] = 1;              queue[rear].x = q.x + 1;              queue[rear++].step = q.step + 1;          }          if(q.x <= k && !visit[q.x*2]) {              visit[q.x*2] = 1;              queue[rear].x = q.x * 2;              queue[rear++].step = q.step + 1;  }}}int main(void) {int n;int k;scanf("%d %d",&n,&k);memset(visit,0,sizeof(visit));bfs(n,k);return 0;}