
bfs
文章平均质量分 84
WA是一笔财富
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
hdu1226超级密码 bfs
传送门:hdu1226 中文题题意就不多说了,重点是方法,不要试图去枚举十进制n的倍数来然后看看给的几个数字能否凑出来,可以想象2要翻倍多少次才能达到500位的长度,因此要从给定的数字入手,枚举数字的各种组合情况,判断是不是n的整数倍。而且这样的话还有一个强剪枝就是如果余数相同就没必要再次入队了,因为无论是大数还是小数如果模n同余那么再添上其他数字的话再模n还是同余的,这样每个余数最多在队列里出原创 2016-10-21 17:08:15 · 1671 阅读 · 0 评论 -
HDU 3567 Eight II 预处理+bfs+hash
传送门:HDU3567 题意:经典八数码问题,将八数码从状态A转化到状态B,问最短且字典序最小的解法。 思路:先说说我自己吧,我是刚做完了POJ1077就来做这个题,当时感觉这不是一样的么,改个bfs结束条件不就完事了,然后就一发wa。。看题解才发现A*算法不能保证输出结果是字典序最小的,仔细想想,好像确实是,因为A*中F=G+H的等式是为了更快的求得解,我们每次从优先队列中取出来的状态是F值原创 2017-01-23 19:36:52 · 1203 阅读 · 0 评论 -
HDU 3533 Escape 预处理+bfs
传送门:HDU3533 题意: 一个人从(0,0)跑到(n,m),只有k点能量,一秒消耗一点,在图中有k个炮塔,给出炮塔的射击方向c,射击间隔t,子弹速度v,坐标x,y问这个人能不能安全到达终点要求: 1.人不能到达炮塔所在的坐标 2.炮塔会挡住子弹 3.途中遇到子弹是安全的,但是人如果停在这个坐标,而子弹也刚好到这个坐标,人就被射死(即人只会在整数秒死) 4.人可以选择停止不动思路:先把所原创 2017-01-23 20:17:07 · 355 阅读 · 0 评论 -
HDU 3085 Nightmare 双向bfs
传送门:HDU3085 题意: n*m地图上有 ‘. ’:路 X:墙 Z:鬼,每秒蔓延2个单位长度,可以穿墙,共两个,每秒开始时鬼先动 M:每分钟可移动3个单位长度 G:每分钟课移动1个单位长度 问两人是否可在不被鬼吃掉的前提下成功碰面 思路:双向bfs,即对两人同时bfs,若某人走的格子另一个人已经走过,则说明能碰面原创 2017-01-23 21:05:47 · 266 阅读 · 0 评论 -
HDU 1067 Gap bfs+hash
传送门:HDU1067 题意:给出表如第一个图,给出每个数,共有28个数,首先要将11,21,31,41放到前面去如第二个图,然后每次可以挑选一个空位把某个数放在此位置,但是要保证此数恰好是空位左边的数的后一个数,比如空位左边的数是42,则只能把43移到空位去。如果是47的话是没有后一个数的。 思路:将32个数做成个字符串然后hash记录,然后bfs搜索。估计用map应该也可以。 代码:原创 2017-01-23 21:31:53 · 430 阅读 · 0 评论 -
POJ 1077 八数码问题
传送门:POJ1077 题意:经典八数码问题求解。建议做之前先看一下http://www.cnblogs.com/goodness/archive/2010/05/04/1727141.html,八数码问题的八种境界,不过个人感觉其中的hash部分讲的有问题,至少和代码中的hash方法不一样,不过也有可能是我理解的不到位,不管怎样,以代码为准吧,而且这篇博客其他部分写的还挺好的。 我这里用的是原创 2017-01-23 18:09:31 · 609 阅读 · 0 评论 -
Vladik and Favorite Game CodeForces - 811D bfs+模拟
传送门:CodeForces - 811D 题意:给定n*m的图,你输出一个方向之后,系统反馈给你一个坐标,表示走完这步之后到的位子,问怎样走能在在2*n*m步之内走到终点。 起点是(1,1),终点是'F',‘*’表示不能走,游戏开始的时候,可能将U和D互换,即如果我们操作了U,但是实际是走到了D。L和R同理。 思路:看完题意就被吓到了,这是什么鬼题,特别是还有ffl原创 2017-05-31 19:36:01 · 308 阅读 · 0 评论 -
HDU 6171 Admiral 双向搜索(meet in the middle) + 哈希
传送门:HDU6171 题意:给你一个高度为6的数塔,问最少多少步能走成如下状态。 每次只能将值为0的点与其左上方,上方,下方,右下方四个方向的一个点进行交换。 0 1 1 2 2 2 3 3 3 3 4 4 4 4 4 5 5 5 5 5 5 大于20步可以直接输出“too difficult” 思路:比赛的时候智障的想了一个多少小时的A* 和 IDA* ,还原创 2017-08-24 21:54:23 · 911 阅读 · 5 评论 -
HihoCoder - 1233 Boxes 状压 + bfs预处理
传送门:HihoCoder - 1233 题意:有n个盒子放在n个放盒子的位置,每个盒子大小不一样,每次可以将一个盒子往它相邻的位置移懂,但是只能把小的盒子放到大的盒子上。求最少需要移动多少次之后盒子能从小到大排列地放在每个位置(每个位置一个)。 思路:从初始状态(从小到大排好)bfs所有的可能状态,并记录所需要的步数,状态的记录就是用三位二进制数(其实就是八进制)表示一个盒子的位置,这样所有原创 2017-09-23 20:05:24 · 268 阅读 · 0 评论 -
UVA 11624 Fire! bfs
UVA 11624 Fire! Joe works in a maze. Unfortunately, portions of the maze have caught on fire, and the owner of the maze neglected to create a fire escape plan. Help Joe escape the maze. Given Joe原创 2017-01-23 17:18:11 · 375 阅读 · 0 评论 -
POJ 3414 Pots
传送门:POJ3414 题意:有两个容量已知的杯子,给定倒水的方法,问怎么能够倒出C单位水来。 倒水方法:1.FILL(i) 将i杯倒满 2.DROP(i)将i杯倒空 3.POUR(i,j)将i杯的水倒入j杯中(若满则停止)。 思路:个人建议做这题之前先去做一下HDU1495,把那题搞明白这题就剩下路径输出的问题了。 其实这题也就难在路径输出上,因为倒水方法都给定了,bfs原创 2017-01-23 16:33:55 · 205 阅读 · 0 评论 -
hdu5025 Saving Tang Monk 状压bfs
传送门:hdu5025 题意:悟空要去救师傅,必须按顺序拿到规定数目的钥匙,遇到蛇(S)要多花一秒钟,问最短时间。 自己不不知道怎么判定蛇死没死,看题解发现新大陆,用一个数组来进行状态压缩,book[i][j][k][s]标记i,j点收集钥匙的状态(k)和杀死蛇的状态(s),其中最后一维最为神奇,因为一共最多五条蛇,所以给蛇编号以后用五位二进制数来保存五条蛇的状态,1表示已经被杀死了,0表示尚原创 2016-10-21 21:46:27 · 274 阅读 · 0 评论 -
hdu 2102 A计划bfs
传送门:hdu2102 题意中能够在T时刻找到公主就是T时刻以内找到公主,因为打不了你可以在一个格子里多呆几秒嘛。。 典型广搜,book数组和入队条件稍微改动一下即可。#include #include #include #include using namespace std; int n,m,T; int ef,er,ec; int go[4][2]={0,1,1,0,0,-1,-原创 2016-10-21 18:12:34 · 278 阅读 · 0 评论 -
胜利大逃亡hdu1253三维bfs
传送门:hdu1253 看题立马明白是bfs,但是很容易超时,所以要做适当的剪枝。#include #include #include #include using namespace std; int go[6][3]={0,1,0,1,0,0,0,-1,0,-1,0,0,0,0,1,0,0,-1}; int map[55][55][55]; int book[55][55][55];原创 2016-10-15 20:35:13 · 235 阅读 · 0 评论 -
POJ2688Cleaning Robot bfs+dfs
传送门:poj2688 题意:从求从给定点出发,遍历所有标记出来的点的最短路。 这题思维很巧妙啊,因为有多个标记点,所以先用bfs求出任意两个标记点以及起始点和任意标记点之间的最短路径,这样就变成了变种的TSP(旅行商)问题,即求遍历所有点的最短路,这时再用dfs求解就行了。#include #include #include #include #include using name原创 2016-11-02 17:29:07 · 269 阅读 · 0 评论 -
HDU4198 Quick out of the Harbour bfs+优先队列
传送门:HDU4198 题意:找出口,图中有@点要消耗额外时间,问出去的最短时间。 典型且简单广搜+优先队列,全当练习一下优先队列吧。 #include #include #include #include #define M 505 using namespace std; int n,m,d; char map[M][M]; int book[M][M]; int go[4][2]={0原创 2016-11-02 19:22:15 · 239 阅读 · 0 评论 -
HDU2209+POJ3279 枚举+dfs
传送门:HDU2209 传送门:POJ3279 说实话真不知道这两个题算不算搜索,只说枚举也不为过。因为核心思想就是枚举,然后剩下的部分就是检查了。 先说比较简单的HDU2209,下面给的链接讲解的挺明白的 点击打开链接 注意上一张的状态决定下一张是否翻转就好了,其他还比较好理解。 #include #include #include using namespace std;原创 2016-11-02 19:43:05 · 389 阅读 · 0 评论 -
FZU 2150 Fire Game BFS
传送门:FZU 2150 题意:给你一个地图,‘#’代表草地,‘.’代表空地,选择两个起火点,使得所有草地能在最短时间内烧完,注意火在每一秒都往四个方向蔓延(有草地的情况下)。 思路:典型BFS,由于数据量很小,我们可以将所有草地的位置记录下来,然后两两枚举,记录最短时间就好了,需要注意的地方就是可能地图中只有一块草地,需要特判一下。 代码: #include #include #incl原创 2017-02-11 11:25:01 · 238 阅读 · 0 评论 -
非常可乐HDU1495
传送门:HDU1495 中文题意就不说了。 思路:这题被挂到搜索专题里,可我怎么想也想不出来该咋搜,其实还是思路太窄,原来做的搜索题大部分都是走迷宫什么的。。思路被限制住了,但看了题解发现这里bfs的状态转移实际上并不难,在走迷宫之类的问题中,每个点都是一种状态,状态都是从一个点朝四个方向进行转移,这里三个杯子的水量是一种状态,只不过状态转移换成了把水从哪个杯子倒向哪个杯子的问题,一共有六种情原创 2017-01-23 16:17:30 · 303 阅读 · 0 评论 -
HDU - 5040 Instrusive 预处理 + bfs + 优先队列
传送门:HDU 5040 题意:给定一张图,Matt要从M移动到T取偷东西,N,W,S,E表示这些位置有监控器,字母表示这些监控器的初始方向,并且每一秒顺时针旋转90度。现在Matt每移动一格需要花一秒,但是如果当前他所在的位置或者他要去的位置被监控器监视,那么如果他要移动,就必须躲在箱子里移动,时间需要花费3秒。或者也可以选择不移动,躲在箱子里1秒,问Matt最少花费多少时间移动到T。 思路原创 2017-09-20 19:47:34 · 325 阅读 · 0 评论