小结:bfs
概要:
我们在初始状态要到达终止状态可以沿着同深度的向下搜索,这样范围覆盖更广,在解的深度较小的时候十分适用。
技巧及注意:
所有状态在转移后如果要打标记一定要在进队列前打!不要在出队列才打!否则就是tle的后果!
bfs很多技巧啊,我来一一列举吧:
注意:存bfs状态时一定要尽量小化状态,只存有效的信息来进行bfs,而不要存整个图进去(QAQ,noip就是这样挂的。当时太弱。。),对于有连续性的信息,我们只需要维护那一段连续信息即可,如中秋节模拟赛之冷月葬花魂(被虐瞎)中的小岛的贪吃蛇
hash判重:在一些bfs题中所有元素的范围(也可以自己映射呗)很小的情况下,我们假设有k个元吧,我们可以考虑用以基于k进制为底数的幂来进行hash,比如
- 【wikioi】1004 四子连棋
- 【BZOJ】1054: [HAOI2008]移动玩具(bfs+hash)
- 更一般的,我们可以直接用二进制位来判重,这样即快而且冗余少,例如中秋节模拟赛之冷月葬花魂(被虐瞎)中的小岛的贪吃蛇。
数组判重:在一些情况下,比如纯bfs或方向限制啊什么的,可以开多维数组来记录访问状态。如:
- 【wikioi】1026 逃跑的拉尔夫(方向判重)
- 【BZOJ】1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛(dp/-bfs)(方案判重)
- 【BZOJ】1644: [Usaco2007 Oct]Obstacle Course 障碍训练课(bfs)(方向判重)
有障碍的距离:当出现这些起点到终点最多能越过k个障碍的图给你bfs时,可以逆着想,我们想这个点到终点需要越过的最少障碍数,然后用k来判断是否合法即可,比如:
多种约束:当约束条件增多时,我们可以考虑在bfs转移状态时维护多种信息,然后根据题意来决策,比如:
绕圈约束:当bfs中要求我们绕一个指定形状(有且一个连通的)求最短距离,我们可以从这个形状边界的点射一条射线出去,然后在bfs后维护两种方向的bfs,即一种是不经过射线的,一种是从不经过射线的转移到需要经过射线的。也就是饶了一个圈过来后要绕回去时,我们就要维护后者,比如:
双向广搜:当遇到一种从初始状态到目标状态都给你让你求最小移动步数时,我们可以同时从初始状态和目标状态都做bfs,然后判断是否相交即可。很久以前写过一题的,不知道哪题了。。
转换成双状态递推:如果bfs只每次决策只需要根据上一个阶段的状态,那么我们可以不用bfs,此时可能状态是否庞大,这时候我们可以直接转移状态即可,即枚举当前状态看是否能根据上一阶段的状态进行转移。例题:
小结:bfs的更多相关文章
- Rotting Oranges - LeetCode
目录 题目链接 注意点 解法 小结 题目链接 Rotting Oranges - LeetCode 注意点 解法 解法一:bfs.首先先统计所有新鲜的橘子数目fresh,如果fresh大于0则一直执行 ...
- BFS的小结
写这类搜索题.首先感觉要有个框架.比如我的框架对于BFS来说(对于DFS,我想有两个一个是递归版一个是栈版).这里是BFS小结.所以介绍一下BFS.我的框架.(也是搜集了网上许多神人的作品.) 1:节 ...
- BFS小结
其实bfs本身不难,甚至不需要去学习,只要知道它的特性就可以写出来了.往往,bfs都是用递归做的.递归比循环更容易timeout.所以这次遇到一题bfs,卡时间的就悲剧了. PAT1076 #incl ...
- bfs与dfs小结
1,bfs适合状态容易存储的题目,如果状态比较难存储,就难以进行记忆化搜索,必然会难以bfs. (比如听说滑雪这个题你用bfs会死得很难看) 2,但是有些题目会很深(比如网格单源最短路),用dfs会跑 ...
- POJ 3414 Pots【bfs模拟倒水问题】
链接: http://poj.org/problem?id=3414 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22009#probl ...
- PatrolRobot(UVa1600)BFS
PatrolRobot(UVa1600)BFS 珉黻郐距 河吏蝉醉 闵棵黏言 芤她之瞌 褰上稽莨 錾傻奉 郦玫睃芩 摇摇头还没回答魏海洪就抢先回答道:呵呵你们几个别试 蚰镉氡 钬 绦可 ...
- 2017河工大校赛补题CGH and 赛后小结
网页设计课上实在无聊,便开始补题,发现比赛时候僵着的东西突然相通了不少 首先,"追妹"这题,两个队友讨论半天,分好多种情况最后放弃(可是我连题目都没看啊),今天看了之后试试是不是直 ...
- 2018年天梯赛LV2题目汇总小结
Ⅰ.L2-1 分而治之---邻接表 分而治之,各个击破是兵家常用的策略之一.在战争中,我们希望首先攻下敌方的部分城市,使其剩余的城市变成孤立无援,然后再分头各个击破.为此参谋部提供了若干打击方案.本题 ...
- 深度估计&平面检测小结
https://yq.aliyun.com/ziliao/582885 最近一段时间已知忙着赶图像分析与理解的项目,在三个星期内强行接触了CNN,MRF,Caffe,openCV在内的很多东西.现在项 ...
随机推荐
- 算法笔记_129:计数排序(Java)
目录 1 问题描述 2 解决方案 2.1比较计数排序 2.2 分布计数排序 1 问题描述 给定一组数据,请使用计数排序,得到这组数据从小到大的排序序列. 2 解决方案 2.1比较计数排序 下面算法 ...
- Servlet之生命周期【入门版(刚開始学习的人必看)】
6,Servlet的解说 6.1Servlet生命周期 ,继承HttpServlet init方法(初始化Servlet)将来能够做一些初始化工作 service方法(处理请求) 一般不须要重写ser ...
- MySQL数据库字符集由utf8修改为utf8mb4一例
对于mysql 5.5 而言,如果不设定字符集,mysql默认的字符集是 latin1 拉丁文字符集: 为了统一管理和应用开发的方便,一般都会统一将操作系统,客户端,数据库各方面的字符集都设置为 ut ...
- 推荐10款最常用的Android开发工具
我们使用各种语言进行开发时,总是会用到各种各样的开发工具.有些开发工具是开发人员的必备品,有些则是为了提高开发效率而用.Android开发同样也会用到多种开发工具,供开发人员设计.创建.测试和发布程序 ...
- 建立对ActiveX控件的了解
本文来自百度百科:ActiveX控件 ActiveX是Microsoft对于一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM).在有目录和其它支持的网络中,COM变成 ...
- 树莓派/RaspberryPi Ubuntu远程连接
网络设置 设置Ubuntu主机跟树莓派在同一网段,树莓派设置静态IP地址: 查看/etc/network/interfaces的内容,其中有#For static IP, consult /etc/d ...
- Codeforces 401C Team 贪心法
本题使用贪心法.关键是考贪心策略.同一时候要求要细心,我提交的时候也WA了几次.大意题目就是怎样依照给定的规则排列一个01字符串,引用原题例如以下: C. Team time limit per te ...
- ORC 资料Mark
1 OCR开源代码网址汇总 1.1 OCRE(OCR Easy), http://lem.eui.upm.es/ocre.html 1.2 Clara OCR,http://directory.fs ...
- 阿里云maven 库
阿里云maven 库 , 好用,速度快 maven setting.xml https://github.com/ae6623/Zebra/blob/master/maven-repo-setting ...
- 基于注解配置spring
1 对 bean 的标注基于注解方式有3个注解 @Component @Repository 对DAO类进行标注 @Service 对Service类进行标注 @Controller 对Contro ...