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 }

 

你可能感兴趣的:(catch)