广度优先搜索(BFS)——抓住那头牛(POJ 4001)
本文将以(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)相关推荐
- 抓住那头牛(POJ NO.2971)
抓住那头牛(POJ NO.2971) 总时间限制: 2000ms 内存限制: 65536kB Question 描述 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫起始位于点N(0< ...
- C++广度优先搜索算法之抓住那头牛(Catch that cow)
抓住那头牛: 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000).农夫有两种移动方式: ...
- 一文搞定深度优先搜索(DFS)与广度优先搜索(BFS)【含完整源码】
写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...
- 信息学奥赛一本通(1253:抓住那头牛)
1253:抓住那头牛 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 14146 通过数: 5444 [题目描述] 农夫知道一头牛的位置,想要抓住它.农夫和 ...
- 【信奥赛一本通】1253:抓住那头牛(详细代码)
[广度优先搜索算法]1253:抓住那头牛 1.[题目描述] 2.[代码] 1.[题目描述] [题目描述] 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫起始位于点N(0≤N≤100000 ...
- Catch That Cow(抓住那头牛C++)
Catch That Cow Farmer John has been informed of the location of a fugitive cow and wants to catch he ...
- 广度优先搜索BFS进阶(一):多源BFS、优先队列BFS、双端队列BFS
一.多源BFS 在上一篇博客:广度优先搜索BFS基础中,我们接触到的BFS均是单起点(单源)的,但是对于某一些问题,其有多个起点,此类问题我们称为多源BFS问题.先思考下面一道例题: 1.腐烂的橘子 ...
- 【蓝桥杯】历届试题 青蛙跳杯子(广度优先搜索bfs)(C++)
[蓝桥杯]历届试题 青蛙跳杯子 问题描述 思路分析 代码实现 问题描述 题目链接:青蛙跳杯子 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 X星球的流行宠物是青蛙,一般有两种颜色: ...
- 算法简介:层层递进----广度优先搜索(BFS)
算法简介:层层递进----广度优先搜索(BFS) 算法简介 算法简介 BFS算法思想: 首先以一个未被访问过的顶点作为起始顶点,访问其所有相邻的顶点,然后对每个相邻的顶点,再访问它们相邻的未被访问过的 ...
最新文章
- 信息化及信息化的五个层次
- 2015年最棒的10个 JavaScript 框架
- Web三大组件的注册——Servlet、Filter、Listener(监听三大作用域: ServletContext、HttpSession、ServletRequest )
- mysql远程服务器访问数据库
- 监控mysql主从复制监控_shell脚本监控mysql主从同步状态
- Vue解析--如何应对面试官提问
- SQL语句中=null和is null
- java睡眠后继续执行_Java高级编程基础:如何使用线程的休眠,中断和连接
- 高职院校计算机基础课程,高职院校计算机基础课程教学探讨的论文
- Unity3D之移植学习笔记:移植到Android平台
- spring boot + swagger2
- 操作系统中涉及的各种调度算法
- 实用供暖通风空调设计手册 第三版_实用供热空调设计手册(第三版)“流体输配与水力平衡”技术专题讨论会...
- Negotiation - 04
- 数据结构课程笔记1-水王问题
- IL2CPP 构建大小优化
- 如何创建低成本沙箱环境?推荐你使用API仿真!
- [R语言]1. R语言中R包下载存储位置和安装位置
- linux安装ie浏览器吗,Ubuntu 上安装IE浏览器的方法
- 杨昕立计算机学院,华南理工学子在全国大学生数模竞赛中创历史佳绩
热门文章
- 遍历一个文件下的所有目录和文件
- devops 解决了啥问题_您的DevOps有什么问题?
- (35)Gulp 构建任务组合
- Linux中apt install的lock问题
- CSS3 响应式布局实例
- 不能在计算机网络上共享的打印机驱动程序,打印机已经共享,可是当别的电脑安装共享的打印机驱动程序时提示 windows 没法连接到打印机。拒绝访问??...
- matlab robotics工具箱(3)逆运动学
- 视觉SLAM笔记(17) 李代数求导与扰动模型
- 职称计算机承诺书,职称申报承诺书范本
- python的文件读取方式_python中文件读取方式