POJ 3278 Catch That Cow
http://poj.org/problem?id=3278
BFS
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <queue> 5 using namespace std; 6 int N,K; 7 bool visited_flag[100002]={false}; 8 bool check(int x) 9 { 10 if(0<=x&&x<=100000) 11 return true; 12 return false; 13 } 14 void bfs() 15 { 16 queue<int> Q; 17 Q.push(N); 18 Q.push(0); 19 visited_flag[N]=true; 20 int cur_pos; 21 int cur_deep; 22 while(!Q.empty()) { 23 cur_pos=Q.front(); 24 Q.pop(); 25 cur_deep=Q.front(); 26 Q.pop(); 27 if(cur_pos==K) { 28 printf("%d\n",cur_deep); 29 return ; 30 } 31 if(check(cur_pos-1)&&!visited_flag[cur_pos-1]) { 32 Q.push(cur_pos-1); 33 Q.push(cur_deep+1); 34 visited_flag[cur_pos-1]=true; 35 } 36 if(check(cur_pos+1)&&!visited_flag[cur_pos+1]) { 37 Q.push(cur_pos+1); 38 Q.push(cur_deep+1); 39 visited_flag[cur_pos+1]=true; 40 } 41 if(check(2*cur_pos)&&!visited_flag[cur_pos*2]) { 42 Q.push(cur_pos*2); 43 Q.push(cur_deep+1); 44 visited_flag[cur_pos*2]=true; 45 } 46 } 47 } 48 int main() 49 { 50 while(scanf("%d%d",&N,&K)!=EOF) { 51 memset(visited_flag,false,sizeof(visited_flag)); 52 bfs(); 53 } 54 return 0; 55 }