POJ3278——Catch That Cow
2016-08-02 14:32
288 查看
Catch That Cow
Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer John has two modes of transportation: walking and teleporting. * Walking: FJ can move from any point X to the points X - 1 or X + 1 in a single minute * Teleporting: FJ can move from any point X to the point 2 × X in a single minute. If the cow, unaware of its pursuit, does not move at all, how long does it take for Farmer John to retrieve it? Input Line 1: Two space-separated integers: N and K Output Line 1: The least amount of time, in minutes, it takes for Farmer John to catch the fugitive cow. Sample Input 5 17 Sample Output 4 Hint The fastest way for Farmer John to reach the fugitive cow is to move along the following path: 5-10-9-18-17, which takes 4 minutes. Source USACO 2007 Open Silver |
思路:用广搜。step数组记录步数,step[i]表示在i位置上的最小步数,vis数组为标志变量,1表示该点已经走过。若未走过,则进队,vis在该点变为1。对三种情况进行搜索,如果到达 k 位置,停止搜索,返回此时的 step ;否则继续搜索。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cstdlib> #include <cmath> #include <queue> using namespace std; const int MX = 100010; int n, k, head, next; int vis[MX], step[MX]; //vis标记数组, step数组存储到达该点的最小步数 queue<int> q; //广搜需要的辅助队列 int bfs() { q.push(n); //从n点开始搜 vis = 1; step = 0; while(!q.empty()) { head = q.front(); q.pop(); for( int i = 0;i < 3;i++ ) //三种情况 { if( !i ) { next = head - 1; } else if( i==1 ) { next = head + 1; } else next = 2*head; if( next>MX||next<0 ) //如果越界,则继续下一种情况 continue; if( !vis[next] ) { q.push(next); step[next] = step[head] + 1; vis[next] = 1; } if( next==k ) //到达k位置,返回此时的步数 return step[next]; } } return -1; } int main() { cin>>n>>k; memset(vis,0,sizeof(vis)); if( n>=k ) //若n>=k 则只能一步一步的后退 cout<<n-k<<endl; else cout<<bfs()<<endl; return 0; }
相关文章推荐
- POJ 3278 Catch That Cow
- poj 3278 Catch That Cow
- poj 3278--Catch That Cow
- POJ - 3278 Catch That Cow
- POJ 3278 Catch That Cow
- POJ 3278 Catch That Cow
- poj 3278 Catch That Cow(简单的广搜+剪枝)
- 文章标题poj 3278 Catch That Cow(bfs实现)
- POJ 3278 Catch That Cow (Java,bfs)
- Catch That Cow POJ - 3278
- POJ 3278-Catch That Cow(BFS-一维广搜)
- poj 3278 Catch That Cow bfs
- POJ 3278:Catch That Cow 抓住那头牛
- POJ - 3278 Catch That Cow解题报告
- poj 3278 Catch That Cow
- poj 3278 ——Catch That Cow(bfs)
- POJ 3278 Catch That Cow
- [kuangbin带你飞]专题一 简单搜索-C - Catch That Cow POJ - 3278
- poj--3278--Catch That Cow(bfs)
- poj 3278 bfs(Catch That Cow)