POJ 4001 Catch That Cow
题目见此:http://poj.grids.cn/practice/4001/(这里POJ指百练的OJ)
解题思路:
- BFS练手题,RE了好几次……原因是28行处一直写成n>0,应该为n>=0
- 首先要想到用一个数组来储存是否访问过,这点比较重要
- 在判断是否插入队列时要做一些判断,这里我自己的判断感觉不是很严谨,不过总算过了,没有加剪枝
贴代码:
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 }
这几天快考试了,各种忙啊。写题已经不再追求完美了,先要AC就行……
浙公网安备 33010602011771号