POJ3287(BFS水题)
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
Output
Sample Input
5 17
Sample Output
4
Hint
FJ要抓奶牛。
开始输入N(FJ的位置)K(奶牛的位置)。
FJ有三种移动方法:1、向前走一步,耗时一分钟。
2、向后走一步,耗时一分钟。
3、向前移动到当前位置的两倍N*2,耗时一分钟。
问FJ抓到奶牛的最少时间(奶牛不动)
解题思路:很明显我们求最短的时间就相当于求走的最少步数,所以我们就很容易想到用广搜BFS了,把每次FJ可以到的位置都压入队列,然后用一个vis数组标记FJ是否已经去过该位置了,再用 一个step数组存储FJ到该位置所需要的最短时间即可。要注意的是,他的位置也有范围是0-100000,开始我就是因为右区间少了个=号,WA了好几次,所以还是要细心。难的做不出只好做简单的了。。。
附上代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<string.h> 4 #include<queue> 5 using namespace std; 6 int vis[100005]; //标记是否走过 7 int step[100005]; //储存到该处的最短时间 8 int n,k; 9 queue<int> que; 10 int ans; 11 12 int BFS() 13 { 14 que.push(n); 15 step[n]=0; 16 vis[n]=1; 17 while(que.size()) 18 { 19 int p=que.front(); 20 que.pop(); 21 if(p==k) break; 22 for(int i=0;i<3;i++) 23 { 24 int dx; 25 if(i==0) dx=p-1; 26 if(i==1) dx=p+1; 27 if(i==2) dx=2*p; 28 if(dx>=0&&dx<=100000&&vis[dx]==0) 29 { 30 que.push(dx); 31 step[dx]=step[p]+1; 32 vis[dx]=1; 33 } 34 35 } 36 } 37 return step[k]; 38 } 39 40 int main() 41 { 42 while(cin>>n>>k) 43 { 44 memset(vis,0,sizeof(vis)); 45 memset(step,0,sizeof(step)); 46 ans=BFS(); 47 cout<<ans<<endl; 48 } 49 return 0; 50 }
转载于:https://www.cnblogs.com/zjl192628928/p/9313363.html
POJ3287(BFS水题)相关推荐
- BZOJ2252(BFS水题)
题意 给一个0 1矩阵,求每个0到最近的1的曼哈顿距离 水题 广搜即可 #include<iostream> #include<cstring> #include<cst ...
- AcWing 188. 武士风度的牛 BFS 水题
题目描述 农民John有很多牛,他想交易其中一头被Don称为The Knight的牛. 这头牛有一个独一无二的超能力,在农场里像Knight一样地跳(就是我们熟悉的象棋中马的走法). 虽然这头神奇的牛 ...
- NoiOpenjudge水题选刷之_搜索
1789:算24 给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式.现在的问题是,是否存在一种方式使得得到的表达式的结果等于24. 这里加减乘除以及括号的运 ...
- 【TYVJ水题三连发】1502 兴建高铁 1568 Rabbit Number 1673 位图
说是水题..其实本蒟蒻1A的也只有第二道...惭愧惭愧... TYVJ1502 兴建高铁 这个题目其实就是一搜索,愿意BFS或者DFS都可以,SPFA也随意.不过鉴于数据不大,推荐还是DFS(写起来比 ...
- A. 这是一道简单的水题~
A. 这是一道简单的水题~ pbz最近沉浸在数学中无法自拔,他发现了一种非常有趣的数,这个数的十进制表示形式中只含有8和9,这个数有着很好的寓意,代表了pbz的梦想和期望,他想知道对于任意的给定的正整 ...
- 水题/poj 1852 Ants
1 /* 2 PROBLEM:poj1852 3 AUTHER:Nicole 4 MEMO:水题 5 */ 6 #include<cstdio> 7 using namespace std ...
- HDU2673-shǎ崽(水题)
如果不能够直接秒杀的题,就不算水题.又应证了那句话,有时候,如果在水题上卡住,那么此题对于你来说,也就不算是水题了额~~ 刚睡醒,迷迷糊糊. 题目的意思很简单,求一个最大的,再求一个最小的.几乎是什么 ...
- 图论刷水题记录(二)(最短路-----SPFA算法)
继第一篇的后续,又来刷水题了,写的是SPFA算法,这个算法的复杂度比较玄学,感觉能不用就不用了,但是他的好处就是可以判断负圈. 3月26日: 1.POJ 1847 Tram 题意:在一个交通网络上有N ...
- 图论刷水题记录(一)(最短路-----dijkstra算法)
最近实在不知道干些什么,感觉自己除了水题什么都不会做,算了去刷一刷图论的水题吧本来想合起来一起发,想了想太长的话以后看起来也不方便,题目所以今天晚上就先发了dij部分,由上到下由易变难. 1.POJ ...
最新文章
- Non-Maximum Suppression,NMS非极大值抑制
- vue从创建到完整的饿了么(12)miste.vue
- 一次性打开计算机任意程序的脚本(C语言)
- ​【Python】Python中的经典时间序列预测模型总结
- c++11 chrono
- CodeForces - 1174D Ehab and the Expected XOR Problem(构造+思维+位运算)
- Redis 一些高级用法
- ABAP 标准培训教程 BC400 学习笔记之五:ABAP 编程语言的变量,常量和字面量,以及文本符号
- [转载] Java中this和super关键字分别是什么意思
- 华为mate9云闪付功能_华为手机日常使用技巧
- ubuntu drbd双机互备
- oracle浅析导致数据库性能问题的常见原因
- java 多线程内存模型
- OV2640摄像头模块
- ec12编码器电路图_旋转编码器电路原理图
- 如何衡量一篇英语作文词汇丰富度?
- 比较好些的计算机论文题目,计算机论文题目大全(24页)-原创力文档
- 一篇文章学会ICP许可证如何年检
- java排序混乱的字符串字母和数字排序
- css3动画属性菜鸟,CSS3 animation-timing-function 属性 | 菜鸟教程