随笔分类 -  搜索——bfs

摘要:题目链接:http://poj.org/problem?id=1077 使用A*搜索中的估价函数要小于等于真实值才能更快的收敛,本题中已经花费的开销是从start状态到目前状态的花费,也就是dist,可以将字符串映射到一个整数表示开销,如果在hash中没有这个键则表示 这个state并没与进入过队列 阅读全文
posted @ 2020-06-21 15:00 WA自动机~ 阅读(174) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3085 地图中有两个鬼,两个人M和G,步长不同,鬼有曼哈顿距离计算的领域,问人能否相遇,实际上可以通过双向BFS求解。 注意每次点从队列中取出来的时候进行判断是否合法,实时判断,因为鬼是先进行分裂的,并且 阅读全文
posted @ 2020-06-21 09:46 WA自动机~ 阅读(209) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://poj.org/problem?id=3635 题目和最短路算法的形式很像,只要对每个状态确定转移的分支即可,其中每次油量只加一,因为后续一定会在队列中被取出来重新加一(如果可以的话) 代码: #include<iostream> #include<cstring> #inc 阅读全文
posted @ 2020-06-20 18:50 WA自动机~ 阅读(195) 评论(0) 推荐(0) 编辑
摘要:题目链接:https://www.acwing.com/solution/content/8249/ 将两个结点之间能直接相连的边长视为0,不能直接相连的边长视为1,因为需要逆转,所以这个问题就变成了N*M个结点的最短路问题,可以通过双端队列搜索进行优化, 因为在队列中的点具有“两段性”和“单调性” 阅读全文
posted @ 2020-06-20 16:49 WA自动机~ 阅读(325) 评论(0) 推荐(0) 编辑
摘要:题目链接:https://www.acwing.com/problem/content/176/ 由于状态数量的限制,我们可以考虑捆绑人与箱子的状态,我们已知每次箱子的移动一定是由人引起的,可以考虑状态是箱子的位置和箱子推动的时候人的方向,用另一个BFS搜索人从当前位置 到达箱子旁边的该方向的位置但 阅读全文
posted @ 2020-06-20 15:19 WA自动机~ 阅读(395) 评论(0) 推荐(0) 编辑
摘要:题目链接:https://www.acwing.com/problem/content/175/ 题目给出一个01矩阵,要求对于每个点给出图中一个为1的点到这个位置的曼哈顿距离,要求这个曼哈顿距离最小。 转化成多源搜索,对于每一个1,扔进队列进行扩展,扩展到一个没访问过的点一定是到这个点的最短的曼哈 阅读全文
posted @ 2020-06-20 10:26 WA自动机~ 阅读(194) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://poj.org/problem?id=3322 立体的推箱子形式的游戏,可以顺着某一条棱推,其中有些位置只能承受立方体的一半的重量。 这题并不难,理解了状态空间的纬度就很容易实现,其中状态是坐标、躺着的起始位置,躺着的形式。 搜索题目比较考验写代码的能力。 代码: #incl 阅读全文
posted @ 2020-06-20 10:02 WA自动机~ 阅读(198) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1026/ 题意就是一个迷宫,然后有些位置上有守卫,守卫有一个血量,要多花费血量的时间击败他,要求从(0,0)到(n-1,m-1)的最少用时。显然是用优先队列和bfs实现,因为求解图中每一层结点各自的时间不同,所以我 阅读全文
posted @ 2020-03-18 09:58 WA自动机~ 阅读(120) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1732/ 题目就是推箱子游戏,有三个箱子和三个洞,最终目标状态就是三个箱子到三个洞中,所以我们搜索的状态就是人的位置和箱子的位置,因为总共8个状态值,而且横纵坐标的范围也不大,所以我们可以考虑一个8维的数组来存储状 阅读全文
posted @ 2020-03-18 08:59 WA自动机~ 阅读(132) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1226/ 题目大意是:寻找一个五百位之内的C进制密码,该密码是N的正整数倍,而且只能用给定的数构成密码,求这样的密码最小是多少。思路也不难想到,密码的位数有限,我们可以通过广度优先搜索来搜索目标状态,通过已经拼接好 阅读全文
posted @ 2020-03-17 21:10 WA自动机~ 阅读(128) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1429/ 题目就是迷宫问题的变种,给出一张地图,上面分布着钥匙和门,一种要是只能开一种特定的门,给出起点和终点,问在t时间内是否能够走到终点。这个问题显然是要用bfs解决,但是状态量除了位置之外还有钥匙,持有的钥匙 阅读全文
posted @ 2020-03-17 16:58 WA自动机~ 阅读(134) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1253/ 其实就是二维扩展到三维了,增加了搜索方向,其他的没什么不同。 代码如下: 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef unsign 阅读全文
posted @ 2020-03-17 15:46 WA自动机~ 阅读(133) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1242/ 这次的迷宫是有守卫的,杀死一个守卫需要花费1个单位的时间,所以以走的步数为深度,在每一层进行搜索,由于走一步的花费不一定是1,所以我们需要用优先队列寻找最优值。这个题目真是模板题。 代码如下: 1 #in 阅读全文
posted @ 2020-03-17 15:05 WA自动机~ 阅读(130) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1180/ 题目和不同的bfs有个不同的地方就是存在横着的或者竖着的楼梯,楼梯每过一个时刻就改变一次横竖的走向,人可以通过楼梯到达楼梯另一端的位置而只花费1的时间。所以我们只要在遇到楼梯的位置查看楼梯当前的走向,判断 阅读全文
posted @ 2020-03-17 12:54 WA自动机~ 阅读(152) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/2612/ 题意:有两个人在地图上不同的位置,地图上由若干个餐厅,求两人能同时到达一个餐厅所用最少的总时间。 代码如下: 1 #include<bits/stdc++.h> 2 using namespace std 阅读全文
posted @ 2020-03-17 09:10 WA自动机~ 阅读(139) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1072/ 题意:逃离迷宫,路中可能有炸弹,总时间是6个单位,在有炸弹的位置,如果到达的时刻时间大于0,则恢复到6时间,炸弹的位置可以重复到达,求出最终至少需要多少步才能走出迷宫,到达终点。这样的最优化问题和地图相关 阅读全文
posted @ 2020-03-17 00:22 WA自动机~ 阅读(146) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1495/ 题意:给定三个杯子S,M,N,满足S=M+N,现在要求用最短的次数将S杯中的饮倒平分到两个杯子中。我们首先想到这个问题需要用搜索来解决,由于杯子没有刻度,所以每次倒水都是要将一个杯子中的水倒光或者将另一个 阅读全文
posted @ 2020-03-16 23:15 WA自动机~ 阅读(118) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1548/ 题目大意:给定一个楼层、起始点和终点,每个楼可上可下一个长度,求重起始点到终点的最少上下次数。 代码如下: 1 #include<bits/stdc++.h> 2 using namespace std; 阅读全文
posted @ 2020-03-16 22:03 WA自动机~ 阅读(113) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1728/ 关于广度优先搜索的第一篇题解。广度优先搜索,就是状态树的层次遍历,一层一层的搜索,直到搜索到目标状态为止。在扩展的过程中设定一种由上一层扩展到下一层的转化机制,将出现的新的状态放入队列之中,每次取出队首元 阅读全文
posted @ 2020-03-16 21:28 WA自动机~ 阅读(164) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示