本文将以(POJ 4001)抓住那头牛 为例,讲解经典算法广度优先搜索(BFS)的STL写法

在实际写算法中,怎么能不使用更快、更方便、更准确、更高效的C++ STL模板呢

相信很多人都了解过广度优先搜索算法是怎么实现的,那么这里将引入实际例子,

看看在算法求解过程中应该怎么去使用。

总时间限制: 2000ms     内存限制: 65536kB

描述

农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:

1、从X移动到X-1或X+1,每次移动花费一分钟

2、从X移动到2*X,每次移动花费一分钟

假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?

输入

两个整数,N和K

输出

一个整数,农夫抓到牛所要花费的最小分钟数

样例输入

5 17

样例输出

4

解题思路:

由于是求最短时间,所以考虑BFS,题目没有给出图的路径,而是根据题目已知条件,

所以也不用单独开二维数组来保存图,只需要一个Book数组来判断是否已经走过即可

用结构体存放路径的值以及步长,为了在加入结点时显得简洁,我们在结构体内设置

函数,省去定义结构体变量赋值的过程。

解题没什么难度(凡尔赛),就是最普通的BFS即可,

加入新的点时,注意下标范围和判断是否走过就行了

最后放上AC代码,大家可以点击文章开头的链接,去北大OJ实现一下!

解题代码: 

#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<queue>
using namespace std;
int N,K;
const int MaxN = 100000;
int book[100010];
struct Step{int x;int steps;Step(int xx,int s):x(xx),steps(s){}
};
queue<Step> q;
int main(){cin>>N>>K;q.push(Step(N,0));book[N] = 1;while(!q.empty()){Step s = q.front();if(s.x == K){cout<<s.steps<<endl;return 0;}else{  //将三个方向入队if(s.x - 1 >= 0 && !book[s.x - 1]){q.push(Step(s.x-1,s.steps+1));book[s.x-1] = 1;}if(s.x + 1 <= MaxN && !book[s.x + 1]){q.push(Step(s.x+1,s.steps+1));book[s.x+1] = 1;}if(s.x * 2 <= MaxN && !book[s.x * 2]){q.push(Step(s.x*2,s.steps+1));book[s.x*2] = 1;}q.pop(); //出队  }}
return 0;
}

广度优先搜索(BFS)——抓住那头牛(POJ 4001)相关推荐

  1. 抓住那头牛(POJ NO.2971)

    抓住那头牛(POJ NO.2971) 总时间限制: 2000ms 内存限制: 65536kB Question 描述 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫起始位于点N(0< ...

  2. C++广度优先搜索算法之抓住那头牛(Catch that cow)

    抓住那头牛: 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000).农夫有两种移动方式: ...

  3. 一文搞定深度优先搜索(DFS)与广度优先搜索(BFS)【含完整源码】

    写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...

  4. 信息学奥赛一本通(1253:抓住那头牛)

    1253:抓住那头牛 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 14146     通过数: 5444 [题目描述] 农夫知道一头牛的位置,想要抓住它.农夫和 ...

  5. 【信奥赛一本通】1253:抓住那头牛(详细代码)

    [广度优先搜索算法]1253:抓住那头牛 1.[题目描述] 2.[代码] 1.[题目描述] [题目描述] 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫起始位于点N(0≤N≤100000 ...

  6. Catch That Cow(抓住那头牛C++)

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

  7. 广度优先搜索BFS进阶(一):多源BFS、优先队列BFS、双端队列BFS

    一.多源BFS 在上一篇博客:广度优先搜索BFS基础中,我们接触到的BFS均是单起点(单源)的,但是对于某一些问题,其有多个起点,此类问题我们称为多源BFS问题.先思考下面一道例题: 1.腐烂的橘子 ...

  8. 【蓝桥杯】历届试题 青蛙跳杯子(广度优先搜索bfs)(C++)

    [蓝桥杯]历届试题 青蛙跳杯子 问题描述 思路分析 代码实现 问题描述 题目链接:青蛙跳杯子 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 X星球的流行宠物是青蛙,一般有两种颜色: ...

  9. 算法简介:层层递进----广度优先搜索(BFS)

    算法简介:层层递进----广度优先搜索(BFS) 算法简介 算法简介 BFS算法思想: 首先以一个未被访问过的顶点作为起始顶点,访问其所有相邻的顶点,然后对每个相邻的顶点,再访问它们相邻的未被访问过的 ...

最新文章

  1. 信息化及信息化的五个层次
  2. 2015年最棒的10个 JavaScript 框架
  3. Web三大组件的注册——Servlet、Filter、Listener(监听三大作用域: ServletContext、HttpSession、ServletRequest )
  4. mysql远程服务器访问数据库
  5. 监控mysql主从复制监控_shell脚本监控mysql主从同步状态
  6. Vue解析--如何应对面试官提问
  7. SQL语句中=null和is null
  8. java睡眠后继续执行_Java高级编程基础:如何使用线程的休眠,中断和连接
  9. 高职院校计算机基础课程,高职院校计算机基础课程教学探讨的论文
  10. Unity3D之移植学习笔记:移植到Android平台
  11. spring boot + swagger2
  12. 操作系统中涉及的各种调度算法
  13. 实用供暖通风空调设计手册 第三版_实用供热空调设计手册(第三版)“流体输配与水力平衡”技术专题讨论会...
  14. Negotiation - 04
  15. 数据结构课程笔记1-水王问题
  16. IL2CPP 构建大小优化
  17. 如何创建低成本沙箱环境?推荐你使用API仿真!
  18. [R语言]1. R语言中R包下载存储位置和安装位置
  19. linux安装ie浏览器吗,Ubuntu 上安装IE浏览器的方法
  20. 杨昕立计算机学院,华南理工学子在全国大学生数模竞赛中创历史佳绩

热门文章

  1. 遍历一个文件下的所有目录和文件
  2. devops 解决了啥问题_您的DevOps有什么问题?
  3. (35)Gulp 构建任务组合
  4. Linux中apt install的lock问题
  5. CSS3 响应式布局实例
  6. 不能在计算机网络上共享的打印机驱动程序,打印机已经共享,可是当别的电脑安装共享的打印机驱动程序时提示 windows 没法连接到打印机。拒绝访问??...
  7. matlab robotics工具箱(3)逆运动学
  8. 视觉SLAM笔记(17) 李代数求导与扰动模型
  9. 职称计算机承诺书,职称申报承诺书范本
  10. python的文件读取方式_python中文件读取方式