POJ3278 Catch That Cow(BFS)
2015-10-15 19:12
423 查看
点击打开链接
Description
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.
一个广搜题目,首先我们应该判断条件是否否和,则需要找出判断条件(边界条件):
1.x-1>=0,因为一旦x-1小于0了,则乘二倍肯定是小于0的,不满足了;
2.x+1<=k,一旦超过了k,那则是做了无用功;
3.x*2<=100000,一个很好知道的判断条件;
满足了这些则是简单明了的广搜了,直接搞就行。
Description
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.
一个广搜题目,首先我们应该判断条件是否否和,则需要找出判断条件(边界条件):
1.x-1>=0,因为一旦x-1小于0了,则乘二倍肯定是小于0的,不满足了;
2.x+1<=k,一旦超过了k,那则是做了无用功;
3.x*2<=100000,一个很好知道的判断条件;
满足了这些则是简单明了的广搜了,直接搞就行。
/* *********************************************** Author :Mosu Created Time :2015/10/10 18:30:45 File Name :\Users\Mosu\Desktop\project\BC.cpp ************************************************ */ #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <string> #include <math.h> #include <stdlib.h> #include <time.h> using namespace std; #define INF 0x7ffffff struct Node{ int x; int step; }; bool vis[1000009]; int main() { int n,k; while(scanf("%d%d",&n,&k)==2){ queue<Node>q; memset(vis,0,sizeof(vis)); while(!q.empty()) q.pop(); Node temp; temp.x=n; temp.step=0; q.push(temp); while(!q.empty()){ Node now=q.front(); q.pop(); if(now.x==k){ printf("%d\n",now.step); break; } if(now.x-1>=0&&!vis[now.x-1]){ vis[now.x-1]=true; temp.x=now.x-1; temp.step=now.step+1; q.push(temp); } if(now.x+1<=k&&!vis[now.x+1]){ vis[now.x+1]=true; temp.x=now.x+1; temp.step=now.step+1; q.push(temp); } if(now.x<=k&&now.x*2<=100000&&!vis[now.x*2]){ vis[now.x*2]=true; temp.x=now.x*2; temp.step=now.step+1; q.push(temp); } } } return 0; }
相关文章推荐
- hdu 4297
- 【树形DP/搜索】BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会
- 最大的矩形(入门 dp)
- Windows程序设计第五版——源代码001之HelloMsg.c
- 解决嵌套list类型的JSONObject/JSONArray转换成原来list问题。
- POJ1753 Flip Game 高斯消元
- Tair LDB基于Prefixkey中期范围内查找性能优化项目总结
- 薯薯,该吃药了!
- HTTP协议详解(真的很经典)
- linux关于文件搜索命令
- WPF 仿windows8加载动画
- hdu1116Play on Words
- 最小生成树--prime
- Android背景渐变色(shape,gradient)
- 数据结构与算法--图
- Tomcat常见的内存溢出,以及解决方法
- F题 - A+B for Input-Output Practice (V)
- 真正的AC自动机(二分 + 优先队列)
- Kubernetes用户指南(三)--在生产环境中使用Pod来工作、管理部署
- 消息机制-倒计时