首页 > 代码库 > poj3278(Catch That Cow)
poj3278(Catch That Cow)
题目大意:
一个农主寻找牛。给出农主的位置n和牛的位置k。农主可以通过n-1或者n+1或者n*2的步伐找牛,问至少多少步才能找到自己的牛。
解题思路:
简单的BFS。把农主的每一种可能的步伐通过BFS存到栈中,然后看最少多少步到达K坐标。
代码:
1 #include <algorithm> 2 #include <iostream> 3 #include <sstream> 4 #include <cstdlib> 5 #include <cstring> 6 #include <cstdio> 7 #include <string> 8 #include <bitset> 9 #include <vector> 10 #include <queue> 11 #include <stack> 12 #include <cmath> 13 #include <list> 14 #include <map> 15 #include <set> 16 using namespace std; 17 /***************************************/ 18 #define ll long long 19 #define int64 __int64 20 /***************************************/ 21 const int INF = 0x7f7f7f7f; 22 const double eps = 1e-8; 23 const double PIE=acos(-1.0); 24 const int dx[]= {0,-1,0,1}; 25 const int dy[]= {1,0,-1,0}; 26 const int fx[]= {-1,-1,-1,0,0,1,1,1}; 27 const int fy[]= {-1,0,1,-1,1,-1,0,1}; 28 /***************************************/ 29 void openfile() 30 { 31 freopen("data.in","rb",stdin); 32 freopen("data.out","wb",stdout); 33 } 34 /**********************华丽丽的分割线,以上为模板部分*****************/ 35 int vis[200009],cnt[200009];//如果你错了,可以开大点数组试试。 36 int BFS(int n,int k) 37 { 38 queue<int >Q; 39 Q.push(n); 40 int v; 41 while(!Q.empty()) 42 { 43 v=Q.front(); 44 Q.pop(); 45 if (vis[v]==-1) 46 continue; 47 vis[v]=-1; 48 if (v==k) 49 return cnt[k]; 50 if (v<100005&&v>-2) 51 { 52 Q.push(v-1); 53 if (!cnt[v-1]) 54 cnt[v-1]=cnt[v]+1; 55 Q.push(v+1); 56 if (!cnt[v+1]) 57 cnt[v+1]=cnt[v]+1; 58 Q.push(v*2); 59 if (!cnt[v*2]) 60 cnt[v*2]=cnt[v]+1; 61 62 } 63 } 64 return 0; //为什么没这句,结果就不对? 65 } 66 int main() 67 { 68 69 int n,k,sum; 70 while(scanf("%d%d",&n,&k)!=EOF) 71 { 72 memset(vis,0,sizeof(vis)); 73 memset(cnt,0,sizeof(cnt)); 74 sum=BFS(n,k); 75 printf("%d\n",sum); 76 } 77 return 0; 78 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。