HDOJ搜索专题之Catch That Cow

简单bfs题。

View Code
 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <queue>
 4 #define N 150000
 5 using namespace std;
 6 queue<int>q;
 7 int n,k,t[N];
 8 void bfs()
 9 {
10   int i;
11   memset(t,-1,sizeof(t));
12   while(!q.empty()) q.pop();
13   t[n]=0;
14   q.push(n);
15   while(!q.empty())
16   {
17     i=q.front(),q.pop();
18     if(i-1>=0 && t[i-1]==-1)
19     {
20       t[i-1]=t[i]+1;
21       if(i-1==k)  return;
22       q.push(i-1);
23     }
24     if(i+1<=N && t[i+1]==-1)
25     {
26       t[i+1]=t[i]+1;
27       if(i+1==k)  return;
28       q.push(i+1);
29     }
30     if(2*i<=N && t[2*i]==-1)
31     {
32       t[2*i]=t[i]+1;
33       if(2*i==k)  return;
34       q.push(2*i);
35     }
36   }
37 }
38 int main()
39 {
40   while(~scanf("%d%d",&n,&k))
41   {
42     if(n>=k)  printf("%d\n",n-k);
43     else  bfs(),printf("%d\n",t[k]);
44   }
45   return 0;
46 }

 

posted @ 2012-05-11 22:57  BeatLJ  阅读(252)  评论(0编辑  收藏  举报