hdoj 2717 Catch That Cow
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2717
解题思路:BFS 搜索
1 /////////////////////////////////////////////////////////////////////////// 2 //problem_id: hdoj 2717 3 //user_id: SCNU20102200088 4 /////////////////////////////////////////////////////////////////////////// 5 6 #include <algorithm> 7 #include <iostream> 8 #include <iterator> 9 #include <iomanip> 10 #include <cstring> 11 #include <cstdlib> 12 #include <string> 13 #include <vector> 14 #include <cstdio> 15 #include <cctype> 16 #include <cmath> 17 #include <queue> 18 #include <stack> 19 #include <list> 20 #include <set> 21 #include <map> 22 using namespace std; 23 24 /////////////////////////////////////////////////////////////////////////// 25 typedef long long LL; 26 const double PI=acos(-1.0); 27 28 const int x4[]={-1,0,1,0}; 29 const int y4[]={0,1,0,-1}; 30 const int x8[]={-1,-1,0,1,1,1,0,-1}; 31 const int y8[]={0,1,1,1,0,-1,-1,-1}; 32 33 typedef int T; 34 T max(T a,T b){ return a>b? a:b; } 35 T min(T a,T b){ return a<b? a:b; } 36 /////////////////////////////////////////////////////////////////////////// 37 38 /////////////////////////////////////////////////////////////////////////// 39 //Add Code: 40 int n,k,ans; 41 bool flag[200005]; 42 43 struct Node{ 44 int id,step; 45 Node(int i,int s):id(i),step(s){} 46 }; 47 48 void BFS(){ 49 flag[n]=1; 50 if(n==k){ 51 ans=0; 52 return ; 53 } 54 Node node(n,0); 55 queue<Node> q; 56 q.push(node); 57 while(!q.empty()){ 58 Node temp=q.front(); 59 q.pop(); 60 int id[]={temp.id-1,temp.id+1,temp.id*2},step=temp.step+1; 61 for(int p=0;p<3;p++){ 62 if(p==0 && (id[p]<0 || flag[id[p]])) continue; 63 if(p>0 && (temp.id>k || flag[id[p]])) continue; 64 flag[id[p]]=1; 65 if(id[p]==k){ 66 ans=step; 67 while(!q.empty()) q.pop(); 68 return ; 69 } 70 Node res(id[p],step); 71 q.push(res); 72 } 73 } 74 } 75 /////////////////////////////////////////////////////////////////////////// 76 77 int main(){ 78 /////////////////////////////////////////////////////////////////////// 79 //Add Code: 80 while(scanf("%d%d",&n,&k)!=EOF){ 81 BFS(); 82 memset(flag,0,sizeof(flag)); 83 printf("%d\n",ans); 84 } 85 /////////////////////////////////////////////////////////////////////// 86 return 0; 87 } 88 89 /////////////////////////////////////////////////////////////////////////// 90 /* 91 Testcase: 92 Input: 93 5 17 94 Output: 95 4 96 */ 97 ///////////////////////////////////////////////////////////////////////////
posted on 2013-08-26 16:32 SCNU20102200088 阅读(279) 评论(0) 编辑 收藏 举报