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. git 从远程仓克隆到本地新分支

    克隆远程仓代码到本地 git clone  http://******:8080/DEV1-WMALL_DQ/WMALL_DQ_Front.git    // git 库地址 当前分支是master ...

  2. 允许跨域资源共享(CORS)携带 Cookie (转载)

    如何让CORS携带Cookie CORS 是一个 W3C 标准,全称是“跨域资源共享”(Cross-origin resource sharing).默认浏览器为了安全,遵循“同源策略”,不允许 Aj ...

  3. wordpress安装(ubuntu+nginx+php+mariadb)

    一.   环境 ubuntu12.04.4 nginx 1.6.0 mariadb 10.0 更新系统补丁 sudo apt-get update sudo apt-get dist-upgrade ...

  4. 使用XWAF框架(5)——XML解析器:CXDP

    XWAF推出了自己的组合式XML文档解析器,英文名叫:“CXDP”,是“Combined XML Document Parser”的缩写.核心代码属XWAF原创,注释.日志和帮助文档采用全中文描述,特 ...

  5. Oracle 12.2 设置LOCAL_TEMP_TABLESPACE

    12.2 设置LOCAL_TEMP_TABLESPACE SQL>  select username,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE,LOCAL_ ...

  6. [iOS]一些第三方库

    BHInfiniteScrollView 地址 https://github.com/qylibohao/BHInfiniteScrollView 功能 图片轮播 TZImagePickerContr ...

  7. Qt图标自定义

    https://mp.csdn.net/postedit/83449333   参考连接

  8. chromium之MessageLoop浅析

    对chromium的MessageLoop非常感兴趣,接下来会详细分析Windows平台的具体实现. 代码版本:chromium-4.0.210.0_p26329 先看一下依赖的文件 message_ ...

  9. JAVA WEB 前台实时监控后台程序运行

    基本思路: 1. 操作状态在类中以静态变量方式(或公共类存储公共变量方式,SESSION方式.COOKIE方式)存在 2. 前台采用AJAX方式激发后台进行业务逻辑操作,并实时更新操作状态信息 3.  ...

  10. vue-网易云音乐

    vuejs仿写网易云音乐webapp 1.项目API来源 2.项目地址 3.项目主要截图 ​ ​ ​ ​ 4.功能 音乐播放,搜索及主要页面的展示,用户登录部分及登录后才能获取的数据还未实现 5.技术 ...