Time Limit: 2000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
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?
输入
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
#include<stdio.h> #include<string.h> #include<stdlib.h> int k[]={1,-1}; struct node { int x; int step; }ls[1000000]; int bj[1000000]; void bfs(int n, int m) { struct node f, t; int tp = 0, tl = 0, i; t.x = n; t.step = 0; ls[tl++] = t; bj[n] = 1; while(tp < tl) { t = ls[tp++]; if(t.x == m) printf("%d\n",t.step); for(i = 0; i < 3; i++) { if(i == 2) f.x = t.x*2; else f.x=t.x+k[i]; if(!bj[f.x] && f.x > 0 && f.x < 2*m) { bj[f.x] = 1; f.step = t.step + 1; ls[tl++] = f; } } } } int main() { int n, m; while(~scanf("%d%d",&n,&m)) { if(n >= m) { printf("%d\n",n-m); continue; } bfs(n,m); } return 0; }