poj3278 Catch That Cow bfs
题目链接:http://poj.org/problem?id=3278
题目是简单的bfs,我却花了好多时间调试
1 ///2014.4.5 2 ///poj3278 3 //16MS 4 5 #include <iostream> 6 #include <cstdio> 7 #include <algorithm> 8 #include <cstring> 9 using namespace std; 10 11 #define MAXLENGTH 400100 12 13 struct node 14 { 15 int line; 16 int deep; 17 }; 18 int N,K; 19 node queue[MAXLENGTH]; 20 bool visited[MAXLENGTH]; 21 22 int bfs(int n){ 23 memset(visited,false,sizeof(visited) ); 24 int head,tail; 25 head = 0; 26 tail = 1; 27 queue[0].line = n; 28 queue[0].deep = 0; 29 visited[n] = true; 30 31 while( head<tail ){ 32 if( !visited[queue[head].line - 1] && queue[head].line-1 >= 0 ){ 33 queue[tail].line = queue[head].line - 1; 34 queue[tail].deep = queue[head].deep + 1; 35 visited[queue[head].line-1] = true; 36 if( queue[tail].line==K ){ 37 break; 38 } 39 tail++; 40 } 41 if( !visited[queue[head].line + 1] && queue[head].line+1<=K ){ 42 queue[tail].line = queue[head].line + 1; 43 queue[tail].deep = queue[head].deep + 1; 44 visited[queue[head].line+1] = true; 45 if( queue[tail].line==K ){ 46 break; 47 } 48 tail++; 49 } 50 if( !visited[queue[head].line * 2] && queue[head].line<=K ){ 51 queue[tail].line = queue[head].line * 2; 52 queue[tail].deep = queue[head].deep + 1; 53 visited[queue[head].line*2] = true; 54 if( queue[tail].line==K ){ 55 break; 56 } 57 tail++; 58 } 59 head++; 60 } 61 return queue[tail].deep; 62 } 63 64 int main() 65 { 66 // freopen("in","r",stdin); 67 // freopen("out","w",stdout); 68 69 while( cin>>N>>K ){ 70 if( N>K ) 71 cout<<N-K<<endl; 72 else if( N==K ) 73 cout<<"0"<<endl; 74 else 75 cout<<bfs(N)<<endl; 76 } 77 return 0; 78 }