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. rman备份报错,全zero错误处理一例(bbed)

    问题:某数据库在执行rman全备的时候,发现alert日志中有报错,报错提示, file 10,block 305076全部为zero,内容全零,处理过程如下 分析处理: 1. 这个问题可能是 系统或 ...

  2. ios开发遇到的问题

    运行后界面空白,Xcode跳转到APPDelegate.swift文件提示如下 第一种可能原因: 做输出口后在代码中重新命名了输出口 解决方法: 右键控件关闭输出口的连接,变回+号,将它重新连到代码的 ...

  3. DateFormat多线程使用问题

    reference DateFormat in a Multithreading Environment

  4. 关于2018年第九届蓝桥杯[C++省赛B组][第四题:测试次数]的疑问

    题目来源:https://blog.csdn.net/qq_34202873/article/details/79784548 #标题:测试次数#x星球的居民脾气不太好,但好在他们生气的时候唯一的异常 ...

  5. C++练习 | 求解二叉树的高度

    int h(BTree *bt) { if(bt->lchild==NULL&&bt->rchild==NULL) ; if(bt->lchild!=NULL& ...

  6. Flume(4)-监控模型

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

  7. BigData:值得了解的十大数据发展趋势

    当今,世界无时无刻不在发生着变化.对于技术领域而言,普遍存在的一个巨大变化就是为大数据(Big data)打开了大门,并应用大数据技相关技术来改善各行业的业务并促进经济的发展.目前,大数据的作用已经上 ...

  8. sqoop import/export使用经验

    一.先创建一个小表(test_01)进行测试(主节点IP:169.254.109.130/oracle服务器IP:169.254.109.100) 1.测试连接oracle; sqoop list-t ...

  9. RandomAccessFile java

    RandomAccessFile 用来支持读写随机存取文件的类.提供“文件指针”,类似于游标和下标,使用getFilePointer()方法获得,利用seek()方法设置下标. public Rand ...

  10. Postgresql HStore 插件试用小结

    一,     安装 环境介绍:官方说postgresql 9.3 版本之后支持HStore 插件,目前最新版本10.3 本次测试版本:10.1 或 9.6.2 进入psql 运行环境,使用管理员(高级 ...