Catch That Cow

Problem 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.

题目描述:找最短步数,用bfs

第一种:含标记数组

#include<iostream>
#include<algorithm>
#include<string.h>
#include<queue>
using namespace std;
int n, k,ans,step[200010],book[200010]; //wa了好几次,这里一定要大一点 ,step:步数 book:标记走没走
void bfs(int a, int b) {
ans = 0;
book[a] = 1;
queue<int >q;
q.push(a);
while (!q.empty()) {
int x = q.front();
//cout <<x<<" "<<b<<"\n";
q.pop();
if( x== b)break; if (x * 2 <= 200010 && x * 2 >= 0 && book[x * 2] == 0) { //判断边界,判断走没走,
book[2 * x] = 1;
q.push(x * 2);
step[x * 2] = step[x] + 1;
}
if (x + 1 <= 200010 && x + 1 >= 0 && book[x + 1] == 0) { //判断边界,判断走没走,
book[1 + x] = 1;
q.push(x +1);
step[x + 1] = step[x] + 1;
}
if (x - 1 <= 200010 && x - 1 >= 0 && book[x - 1] == 0) { //判断边界,判断走没走,
book[x - 1] = 1;
q.push(x -1);
step[x - 1] = step[x] + 1;
}
}
}
int main() {
while (cin >> n >> k) {
memset(step, 0, sizeof(step)); //不要忘记初始化
memset(book, 0, sizeof(book));
if (n >= k)cout << n - k << endl; //n不大于k的话 就是n-k了
else {
bfs(n, k);
cout << step[k] << endl;
}
}
return 0;
}

第二种:

不加标记数组,思考了两天了,我一直认为可以不加标记数组,但是提交就wa了,找了两天原因没找到,终于发现了,是我判断的顺序不对,一定要最后判读2*x,否则先判断2*i,后边会越来越大,所以你就不好把握最大值了,并且容易超时,所以先判断x-1  

判断顺序很重要

#include<iostream>
#include<algorithm>
#include<string.h>
#include<queue>
using namespace std;
int n, k,step[200010];
int bfs(int a, int b) {
queue<int >q; //初始化
memset(step, 0, sizeof(step));
q.push(a); while (!q.empty()) {
int x = q.front();
q.pop(); if (x == b)break; //找到就终止 if (x - 1 <= 200010 && x - 1 >= 0 && step[x -1] == 0) { //这三个顺序很重要,
q.push(x - 1);
step[x - 1] = step[x] + 1;
}
if (x + 1 <= 200010 && x + 1 >= 0 && step[x +1] == 0) {
q.push(x + 1);
step[x + 1] = step[x] + 1;
}
if (x * 2 <= 200010 && x * 2 >= 0 && step[x * 2]==0) { //这个一定要放在最后边
q.push(x * 2);
step[x * 2] = step[x] + 1;
}
}
return step[b];
}
int main() {
while (cin >> n >> k) { if (n >= k) //因为n减小只能-1,所以直接输出就可以
cout << n - k << endl;
else
cout << bfs(n, k)<< endl;
}
return 0;
}
 

Catch That Cow:BFS:加标记数组:不加标记数组的更多相关文章

  1. HDU 2717 Catch That Cow --- BFS

    HDU 2717 题目大意:在x坐标上,农夫在n,牛在k.农夫每次可以移动到n-1, n+1, n*2的点.求最少到达k的步数. 思路:从起点开始,分别按x-1,x+1,2*x三个方向进行BFS,最先 ...

  2. poj 3278 Catch That Cow (bfs搜索)

    Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 46715   Accepted: 14673 ...

  3. POJ 3278 Catch That Cow(BFS,板子题)

    Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 88732   Accepted: 27795 ...

  4. POJ 3278 Catch That Cow[BFS+队列+剪枝]

    第一篇博客,格式惨不忍睹.首先感谢一下鼓励我写博客的大佬@Titordong其次就是感谢一群大佬激励我不断前行@Chunibyo@Tiancfq因为室友tanty强烈要求出现,附上他的名字. Catc ...

  5. POJ3278 Catch That Cow —— BFS

    题目链接:http://poj.org/problem?id=3278 Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total S ...

  6. POJ3278——Catch That Cow(BFS)

    Catch That Cow DescriptionFarmer John has been informed of the location of a fugitive cow and wants ...

  7. poj 3278 catch that cow BFS(基础水)

    Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 61826   Accepted: 19329 ...

  8. POJ - 3278 Catch That Cow BFS求线性双向最短路径

    Catch That Cow Farmer John has been informed of the location of a fugitive cow and wants to catch he ...

  9. catch that cow (bfs 搜索的实际应用,和图的邻接表的bfs遍历基本上一样)

    Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 38263   Accepted: 11891 ...

  10. POJ3278 Catch That Cow(BFS)

    Description Farmer John has been informed of the location of a fugitive cow and wants to catch her i ...

随机推荐

  1. nRF5 SDK for Mesh(五) Light switch demo 点灯例子

    Light switch demo  灯开demo   Purpose This demo project consists of four sub examples - The light swit ...

  2. ./redis-trib.rb 报错:/usr/local/rvm/gems/ruby-2.4.2/gems/redis-4.0.1/lib/redis/client.rb:119:in `call': ERR Slot 0 is already busy (Redis::CommandError)

    错误提示是 slot插槽被占用了(这是 搭建集群前时,以前redis的旧数据和配置信息没有清理干净.) 解决方案是 用redis-cli 登录到每个节点执行  flushall  和 cluster ...

  3. 百度地图中找不到BMap的解决

    一般情况下是引用的问题,产生的原因大概有两种 1.不同架构的引用方式不同,引用js的方式不同导致 2.自身调用顺序有误 官方的引用方式是使用标签引入,示例 <script type=" ...

  4. 1015 德才论(sort、结构体vector)

    题目: 宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君子而与之,与其得小人,不 ...

  5. 解决在 win10 下 vs2017 中创建 MFC 程序拖放文件接收不到 WM_DROPFILES 消息问题

    解决方案 这个问题是由于 win10 的安全机制搞的鬼,即使以管理员权限运行也不行,因为它会把 WM_DROPFILES 消息过滤掉,那怎么办呢?只需在窗口初始化 OnInitDialog() 里添加 ...

  6. Flume(4)-监控模型

    一. 监控端口数据 首先启动Flume任务,监控本机44444端口,服务端: 然后通过netcat工具向本机44444端口发送消息,客户端: 最后Flume将监听的数据实时显示在控制台. 1. 安装n ...

  7. python3 实现一个多级菜单小功能

    记录下一下 #!/usr/bin/env python3 ''' 需求:三级菜单 三级菜单,依次进入子菜单 ''' City = { '北京':{ '大兴区':[ '亦庄','黄村','中信新城',' ...

  8. java->php之在线子域名查询-接口光速版

    因为不懂java,所以 用php重写了大佬的 在线子域名查询-接口光速版 http://sbd.ximcx.cn/  这是大佬的 然后 改一下 ,用php 其实就是改了几行代码而已,jquery和aj ...

  9. python实现文件夹的排序

    我的github地址. 代码: # -*- coding: utf-8 -*- __author__ = "YuDian" ''' v1.0: 2018/3/19 21:39 完成 ...

  10. P,NP,NPC的通俗解释

    这或许是众多OIer最大的误区之一.    你会经常看到网上出现“这怎么做,这不是NP问题吗”.“这个只有搜了,这已经被证明是NP问题 了”之类的话.你要知道,大多数人此时所说的NP问题其实都是指的N ...