概要:

我们在初始状态要到达终止状态可以沿着同深度的向下搜索,这样范围覆盖更广,在解的深度较小的时候十分适用。

技巧及注意:

所有状态在转移后如果要打标记一定要在进队列前打!不要在出队列才打!否则就是tle的后果!

bfs很多技巧啊,我来一一列举吧:

注意:存bfs状态时一定要尽量小化状态,只存有效的信息来进行bfs,而不要存整个图进去(QAQ,noip就是这样挂的。当时太弱。。),对于有连续性的信息,我们只需要维护那一段连续信息即可,如中秋节模拟赛之冷月葬花魂(被虐瞎)中的小岛的贪吃蛇

hash判重:在一些bfs题中所有元素的范围(也可以自己映射呗)很小的情况下,我们假设有k个元吧,我们可以考虑用以基于k进制为底数的幂来进行hash,比如

  1. 【wikioi】1004 四子连棋
  2. 【BZOJ】1054: [HAOI2008]移动玩具(bfs+hash)
  3. 更一般的,我们可以直接用二进制位来判重,这样即快而且冗余少,例如中秋节模拟赛之冷月葬花魂(被虐瞎)中的小岛的贪吃蛇。

数组判重:在一些情况下,比如纯bfs或方向限制啊什么的,可以开多维数组来记录访问状态。如:

  1. 【wikioi】1026 逃跑的拉尔夫(方向判重)
  2. 【BZOJ】1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛(dp/-bfs)(方案判重)
  3. 【BZOJ】1644: [Usaco2007 Oct]Obstacle Course 障碍训练课(bfs)(方向判重)

有障碍的距离:当出现这些起点到终点最多能越过k个障碍的图给你bfs时,可以逆着想,我们想这个点到终点需要越过的最少障碍数,然后用k来判断是否合法即可,比如:

  1. 【BZOJ】1295: [SCOI2009]最长距离(spfa+暴力)

多种约束:当约束条件增多时,我们可以考虑在bfs转移状态时维护多种信息,然后根据题意来决策,比如:

  1. 【BZOJ】1632: [Usaco2007 Feb]Lilypad Pond(bfs)

绕圈约束:当bfs中要求我们绕一个指定形状(有且一个连通的)求最短距离,我们可以从这个形状边界的点射一条射线出去,然后在bfs后维护两种方向的bfs,即一种是不经过射线的,一种是从不经过射线的转移到需要经过射线的。也就是饶了一个圈过来后要绕回去时,我们就要维护后者,比如:

  1. 【BZOJ】1656:[Usaco2006 Jan]The Grove 树木(bfs+特殊的技巧)

双向广搜:当遇到一种从初始状态到目标状态都给你让你求最小移动步数时,我们可以同时从初始状态和目标状态都做bfs,然后判断是否相交即可。很久以前写过一题的,不知道哪题了。。

转换成双状态递推:如果bfs只每次决策只需要根据上一个阶段的状态,那么我们可以不用bfs,此时可能状态是否庞大,这时候我们可以直接转移状态即可,即枚举当前状态看是否能根据上一阶段的状态进行转移。例题:

  1. 【vijos】1791 骑士的旅行(特殊的技巧)

小结:bfs的更多相关文章

  1. Rotting Oranges - LeetCode

    目录 题目链接 注意点 解法 小结 题目链接 Rotting Oranges - LeetCode 注意点 解法 解法一:bfs.首先先统计所有新鲜的橘子数目fresh,如果fresh大于0则一直执行 ...

  2. BFS的小结

    写这类搜索题.首先感觉要有个框架.比如我的框架对于BFS来说(对于DFS,我想有两个一个是递归版一个是栈版).这里是BFS小结.所以介绍一下BFS.我的框架.(也是搜集了网上许多神人的作品.) 1:节 ...

  3. BFS小结

    其实bfs本身不难,甚至不需要去学习,只要知道它的特性就可以写出来了.往往,bfs都是用递归做的.递归比循环更容易timeout.所以这次遇到一题bfs,卡时间的就悲剧了. PAT1076 #incl ...

  4. bfs与dfs小结

    1,bfs适合状态容易存储的题目,如果状态比较难存储,就难以进行记忆化搜索,必然会难以bfs. (比如听说滑雪这个题你用bfs会死得很难看) 2,但是有些题目会很深(比如网格单源最短路),用dfs会跑 ...

  5. POJ 3414 Pots【bfs模拟倒水问题】

    链接: http://poj.org/problem?id=3414 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22009#probl ...

  6. PatrolRobot(UVa1600)BFS

    PatrolRobot(UVa1600)BFS 珉黻郐距 河吏蝉醉 闵棵黏言 芤她之瞌 褰上稽莨 錾傻奉 郦玫睃芩 摇摇头还没回答魏海洪就抢先回答道:呵呵你们几个别试 蚰镉氡 钬 绦可 ...

  7. 2017河工大校赛补题CGH and 赛后小结

    网页设计课上实在无聊,便开始补题,发现比赛时候僵着的东西突然相通了不少 首先,"追妹"这题,两个队友讨论半天,分好多种情况最后放弃(可是我连题目都没看啊),今天看了之后试试是不是直 ...

  8. 2018年天梯赛LV2题目汇总小结

    Ⅰ.L2-1 分而治之---邻接表 分而治之,各个击破是兵家常用的策略之一.在战争中,我们希望首先攻下敌方的部分城市,使其剩余的城市变成孤立无援,然后再分头各个击破.为此参谋部提供了若干打击方案.本题 ...

  9. 深度估计&平面检测小结

    https://yq.aliyun.com/ziliao/582885 最近一段时间已知忙着赶图像分析与理解的项目,在三个星期内强行接触了CNN,MRF,Caffe,openCV在内的很多东西.现在项 ...

随机推荐

  1. Unity Game Starter Kit for Windows Store and Windows Phone Store games

    原地址:http://digitalerr0r.wordpress.com/2013/09/30/unity-game-starter-kit-for-windows-store-and-window ...

  2. Spring整合JDBC实现简单的增删改

    Spring整合JDBC实现简单的增删改: 1.导入Spring的包和数据库的驱动包: 2.选择一个数据源(dbcp和C3P0) 3.导入数据源的包(这里我们使用dbcp) <span styl ...

  3. Linux中setup命令command not found如何解决?

    1.安装setuptool    yum -y install setuptool 2.系统服务管理  yum -y install ntsysv 3.setup中配套的防火墙设置也得装上去,不然会出 ...

  4. Python 对字符串切片

    对字符串切片字符串 'xxx'和 Unicode字符串 u'xxx'也可以看成是一种list,每个元素就是一个字符.因此,字符串也可以用切片操作,只是操作结果仍是字符串:>>> 'A ...

  5. post请求乱码

    jsp页面中    <meta http-equiv="content-type" content="text/html; charset=UTF-8"& ...

  6. 【转帖】为什么不要把ZooKeeper用于服务发现

    http://www.infoq.com/cn/news/2014/12/zookeeper-service-finding ZooKeeper是Apache基金会下的一个开源的.高可用的分布式应用协 ...

  7. 【LeetCode】101. Symmetric Tree (2 solutions)

    Symmetric Tree Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its ...

  8. C#中各种集合类比较

    数组(Array)的不足(即:集合与数组的区别) 1. 数组是固定大小的,不能伸缩.虽然System.Array.Resize这个泛型方法可以重置数组大小,但是该方法是重新创建新设置大小的数组,用的是 ...

  9. spring in action 5.1 小结 spring mvc起步

    0 配置 DispatcherServlet 是 spring mvc的核心,常规配置方法可以查看之前博客.springMVC简单例子 在此使用servlet 3 规范和 spring3.1 功能增强 ...

  10. hibernate 中多对多关系对象集合的保存

    多对多关系映射和一对多关系映射开发步骤差不多, 例子如下:员工和项目之间的关系,一个员工可以参与多个项目:一个项目可以有多个开发人员参与.因此是多对多的关系. 1 分析数据表 1.1)员工表 CREA ...