
搜索——广度优先搜索(BFS)
文章平均质量分 82
XDU_Skyline
Everything is over, everything is just beginning.
展开
-
习题6-4 骑士的移动 UVa439
1.题目描述:点击打开链接2.解题思路:典型的BFS,原创 2014-08-29 17:32:35 · 649 阅读 · 0 评论 -
HDU 5012 Dice (2014年西安赛区网络赛F题)
1.题目描述:点击打开链接2.解题思路:本题利用BFS解决。本题是一道隐式图搜索题目,不过本题的状态扩展比较简单,直接用常量数组即可搞定,然后就可以进行扩展了,比较简单就不再详细叙述过程了。3.代码:#include#include#include#include#include#include#include#include#include#include#inc原创 2015-09-12 22:59:07 · 459 阅读 · 0 评论 -
例题5.2 独轮车 UVa10047
1.题目描述:点击打开链接2.解题思路:本题利用BFS解决,根据题意描述,可以把{x,y,dir,color}当做状态,然后进行状态转移即可。3.代码:#include#include#include#include#include#include#include#include#include#include#include#include#include#原创 2015-09-29 22:15:06 · 1069 阅读 · 0 评论 -
ZOJ 3814 Sawtooth Puzzle (2014年牡丹江赛区网络赛F题)
1.题目描述:点击打开链接2.解题思路:本题是一道隐式图的搜索题目。一般来说,这类题目首先要定义状态,接下来是弄清楚状态如何转移,以及状态如何判重,如何判断当前状态是否和目标状态相同。至于求解最短路就是常用的BFS即可。接下来我们逐一展开讨论。1.状态的定义:看到这道题,猛一下会想着把每个字符分别用01表示,然后看成二进制码进行状态压缩,这个状态定义虽然可以,但是显然,状态过于精确原创 2015-08-19 13:25:48 · 700 阅读 · 0 评论 -
例题6.7 冰人 HDU2936
1.题目描述:点击打开链接2.解题思路:本题是一道很经典的路径寻找问题,利用A*算法解决。即BFS+利用估价函数剪枝。做本题的第一个障碍是题意比较复杂,需要事先在草稿纸上理清头绪,弄清楚这4种操作,每种操作又分哪些特殊情况。还要弄清楚4种冰块是怎么转换的。这样,弄清楚这些细节,才能够写出鲁棒的扩展状态的函数。接下来,就是如何利用BFS来寻找路径了。首先要弄清楚怎么保存一个状态,应该原创 2015-08-11 11:58:17 · 652 阅读 · 0 评论 -
#301 (div.2) C. Ice Cave
1.题目描述:点击打开链接2.解题思路:本题利用BFS解决。由于行走的时候有两种情况,当遇到‘X'时会掉到下一层,当遇到’.'时还在本层,只不过’.'要变为'X'。那么直接用BFS进行搜索即可。如果遇到了’X',只需要判断是不是终点即可,否则跳过,如果遇到了‘.',那么将它改为‘X',并入队列即可。比赛时我一直在DFS和BFS之间徘徊不定,但其实不难发现,如果用DFS的话,可能有走不动的情况,原创 2015-05-01 13:54:19 · 1016 阅读 · 0 评论 -
#299 (div.2) B. Tavas and SaDDas
1.题目描述:点击打开链接2.解题思路:本题要求找出所给的幸运数的下标。本题类似于紫书上的一道例题ugly number。利用BFS即可解决。首先将4,7入队列,每次出队列后,将数字添加到set,同时将它们的末尾分别添加是4,7后得到新的幸运数入队列即可。上述过程打表后,直接输出即可。3.代码:#define _CRT_SECURE_NO_WARNINGS #include#inc原创 2015-04-15 12:51:09 · 1040 阅读 · 0 评论 -
习题6-12 筛子难题 UVa810
1.题目描述:点击打开链接2.解题思路:本题是迷宫问题,典型的BFS解法。不过首先应当确定状态是什么。根据题意描述:筛子的坐标+筛子的前面和顶面即构成了一个状态。这样以来,其实本题有点类似于隐式图的搜索。那么状态是怎么逐步扩展的呢?由于筛子每次都有四个方向可以滚动,因此通过判断滚动后的新状态是否合法即可扩展开来。不过向左,向右滚动需要提前打表,列出24种顶面是u,正面是f的右侧面值。详细部分见原创 2015-04-04 23:08:38 · 717 阅读 · 0 评论 -
例题7-10 编辑书稿 UVa11212
1.题目描述:点击打开链接2.解题思路:本题利用迭代加深搜索,也是一道典型的状态空间搜索问题,状态就是1~n的排列,初始状态是输入,终止状态是1,2,……n。由于n≤9,排列最多有9!=362880个,但由于每个状态的后继状态比较多,因此仍有TLE的危险。本题如果利用迭代加深搜索,可以发现做多只需要8步,关键在于如何有效地剪枝。考虑后继不正确的数字的个数h,可以证明每次剪切时h最多减少3(因为原创 2015-02-06 10:40:56 · 1405 阅读 · 0 评论 -
例题7-9 万圣节后的早晨 UVa1601
1.题目描述:点击打开链接2.解题思路:这道题是稀疏图存储+BFS,只要存储好稀疏图,本题就不难解决,但还是怪自己太年幼,不会写稀疏图,磕磕绊绊自己敲了一天样例还有一个没过==,最后弃疗直接学习大牛们的代码。有很多值得学习的地方,关键位置都标记了注释。3.代码:#define _CRT_SECURE_NO_WARNINGS#include#include#include#i原创 2015-02-01 21:29:41 · 1750 阅读 · 0 评论 -
例题6-7 树的层次遍历 UVa122
1.题目描述:点击打开链接2.解题思路:本题是训练二叉树的一道好题。首先要解决读数据问题,根据题意,当输入为“()”时,结束该组数据读入,当没有字符串时,整个输入结束。因此可以专门编写一个readin()函数,类型设置为bool型,遇到第一种情况时返回true,遇到第二种情况返回false,主程序中只要发现readin返回false时就break,结束整个大循环。接下来要建立二叉树,首先为原创 2015-03-29 22:33:55 · 2546 阅读 · 0 评论 -
#297 (div.2) D. Arthur and Walls
1.题目描述:点击打开链接2.解题思路:本题利用BFS解决。一开始想用dfs去搜索连通块,再想办法找到该连通块的左上角和最大的长,宽,然后把该区域都变成'.',显然这种做法无法处理规模较大的情况。此时应该从分割的思想去考虑。找到一个最基本的元素块,把长方体看做是由这些元素快堆积出来的即可。那么这种元素块应该是什么样的呢?通过观察不难发现,所有需要变为'.'的点周围肯定都是'.'。换句话说,原创 2015-03-27 15:26:03 · 809 阅读 · 0 评论 -
例题6-20 理想路径 UVa1599
1.题目描述:点击打开链接2.解题思路:本题要求寻找一条从1到n的路径,使得经过的边数最少,若边数相同时,输出字典序最小的那条路径。路径问题用BFS解决,但本题需要用两次BFS,第一次来统计所有点到n的路径长度;第二次从1出发,沿着路径长度恰好每次减一的点逐步走到终点,但由于从u到v满足d[u]-d[v]==1的路径有多条,需要扫描所有这些路径,找颜色值最小的那条,这就是第二次BFS的目的所在原创 2015-02-10 16:56:59 · 3326 阅读 · 3 评论 -
例题5.1 大火蔓延的迷宫 UVa11624
1.题目描述:点击打开链接2.解题思路:本题利用BFS解决,不过这里关键问题是如何处理火势蔓延的情况。由于火不会自动熄灭,因此可以事先将着火点入队列,然后计算每个格子着火的起始时间,这又是一个BFS。处理完后,在第二次BFS时候只需要加一个判断:当到达新结点时,这个格子还没有着火才把这个新结点入队列。不过这里可以先单独求解各自的最短路,最后在边界时候判断即可,因为如果中途被火势截断无法到达边界原创 2015-09-29 21:41:10 · 1294 阅读 · 0 评论