POJ 4001 Catch That Cow

题目见此:http://poj.grids.cn/practice/4001/(这里POJ指百练的OJ)

解题思路:

  1. BFS练手题,RE了好几次……原因是28行处一直写成n>0,应该为n>=0
  2. 首先要想到用一个数组来储存是否访问过,这点比较重要
  3. 在判断是否插入队列时要做一些判断,这里我自己的判断感觉不是很严谨,不过总算过了,没有加剪枝

贴代码:

 1 #include <iostream>
 2 #include <queue>
 3 using namespace std;
 4 bool b[400002] = {0};
 5 
 6 int main()
 7 {
 8     queue<pair<int, int> > q;
 9     int n, k, i;
10     cin >> n >> k;
11     if(n >= k)
12     {
13         cout << n-k;
14         return 0 ;
15     }
16     q.push(make_pair(n, 0));
17     while(1)
18     {
19         n = q.front().first;
20         i = q.front().second;
21         if(n == k)    break;
22         q.pop();
23         if(n > 0 && n < 200002 && b[n*2] == 0)
24         {
25             q.push(make_pair(n*2, i+1));
26             b[n*2] = 1;
27         }
28         if(n >= 0 && n < 200002 && b[n+1] == 0)
29         {
30             q.push(make_pair(n+1, i+1));
31             b[n+1] = 1;
32         }
33         if(n > 0 && b[n-1] == 0)
34         {
35             q.push(make_pair(n-1, i+1));
36             b[n-1] = 1;
37         }
38     }
39     cout << i;
40 }
View Code

这几天快考试了,各种忙啊。写题已经不再追求完美了,先要AC就行……

posted on 2013-06-16 15:17  白~  阅读(238)  评论(0)    收藏  举报

导航