
BFS
aozil_yang
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
习题 6-4 UVA 439 Knight Moves 骑士的移动
题意很简单:问一个马从起点走到终点最短步数。思路:简单的bfs,输入得到起点终点,直接用队列走就可以了!#include#includeusing namespace std;int sx,sy,gx,gy;const int INF = 1e8;int idx[10][10];const int dx[] = {-1,-2,-2,-1,1,2,2,1};const原创 2016-02-20 13:26:41 · 533 阅读 · 0 评论 -
LeetCode 133 Clone Graph (BFS || DFS)
大体题意:这个题目看了许久 才发现就是一道水题,他就是给你一个无向图,建图的方式都不用你管,他是用vector 保存的!在给你一个新的点,克隆出这个图来!第一次做leetcode,搞了半天。。思路:BFS或者DFS都行 只要能遍历一遍所有的点就好了!这个图有自环, 加个vis判断是否重复访问即可!因为是克隆图嘛,可以建立一个unordered_map mp;来一个原原创 2016-11-03 20:48:27 · 667 阅读 · 0 评论 -
HDU 1664 Different Digits (数论 -- 鸽笼原理 + BFS搜索 + 余数判重)
大体题意:给你一个数字n,让你找出它的一个倍数m,使得m中不同的数字尽可能的少,如果有多解,输出最小的一个!思路:肯定是搜索的题目,我们得先考虑数字m 不同数字的种类个数,以便缩小搜索范围。这里巧妙的运用了鸽笼原理,举个简单的小例子来说明这个原理,如果让你选择一个月份的话,你选择13次肯定有两次是重复的,这个题目同样也是,我们选择n+1个数字,肯定有两个数对n取模是相同的。我们这样原创 2016-11-09 00:23:50 · 531 阅读 · 0 评论 -
HDU 1043 Eight ((八数码问题)逆向BFS + 康托定理判重)
题意不说了,就是一个八数码思路:很暴力,直接把空格看成0,然后把九个数字连接起来,用这个数来代表这个状态。然后正常来想这个题目时,肯定是 从给定状态到目标态来bfs搜索,但是这样做死活爆内存 (好难受= =)我们需要转个弯,从目标态向给定态搜索,这样可以直接预处理打表了。正好这是一个9个不同数字的排列,用康托定理完美去重。注: 用c++交的,G++还是爆内存= =#in原创 2017-01-23 21:58:55 · 848 阅读 · 0 评论 -
POJ 1077 Eight (正向BFS + 康托展开)
题意不说了 八数码问题:和上篇博客 HDU 1043 题目是一样的!但是做法上有些出入。HDU 时间限制比较长,而且是多组输入,所以要逆向bfs 进行打表处理。而POJ 1077 这个题目,时间是1S ,单组输入。因此输入一组 搜索一组即可。9个数的排列 判重用康托展开来做。但是这个队列要自己写,STL的queue 会超时。自己写的队列,在输出时 能很方原创 2017-01-24 16:25:24 · 814 阅读 · 0 评论 -
例题7-8 UVA 10603 Fill 倒水问题
完全仿照紫书上来写的!书中大体思路是:用ans[]来记录答案,不断取最小值来更新!用vis[][]来表示是否访问过,之所以是二维数组,是因为总水量是固定的,两个杯子确定,第三个杯子自然也就确定,两个状态足矣!用结构体表示每一个状态!其中包括每个杯子的水量!u.wat[],还有dist 为到目前这个状态总的取水量!然后用优先队列不断倒水,有一个技巧,代码中先算出需要倒的水量,原创 2016-03-04 07:57:09 · 885 阅读 · 0 评论 -
例题7-9 UVA - 1601 && POJ 3523 The Morning after Halloween (双向BFS)
大体题意:你给一个h*w 的网格,网格上最多有三只小鬼,小鬼用小写字母abc 表示,他们的目标用ABC表示,问小鬼移动到目标最短的步数,他们可以同时走,走法有五种:上下左右和不动,其中有几种情况的走法是非法的:1.两只小鬼一步以内交换了位置。2.两只小鬼的下一步是同一个位置。其余情况合法!思路:先将不是#的位置变成标号。然后把所有空格提出来建立一张图,把初始位置原创 2016-05-29 13:00:01 · 778 阅读 · 1 评论 -
UVA 11882 Biggest Number (dfs搜索+bfs 剪枝)
大体题意:给你一个r*c的数字矩阵,要求从任意一个点开始走,只能上下左右走, 求走的过数连接起来最大是多少?思路:直接dfs每一个数字,在每一层dfs中,加上bfs 判断剩下的数连接起来能否大于当前的ans 不能的话 剪枝了。虽然思路是这样的,但昨天一直TLE, 或许姿势不对,第二天重写了一遍 就好很多了= =#include #include #include #inc原创 2017-02-25 10:36:48 · 603 阅读 · 0 评论 -
Codeforces Round #408 (Div. 2) -- D. Police Stations(bfs)
题意:告诉你一棵树, 告诉你某些结点为警察局, 其余的为普通点 , 普通点到每个警察局的距离都小于等于d,现在要求删除尽可能多的边,使得每个点到警察局的距离依然小于等于d,输出数量以及哪些边?思路:直接从警察局开始bfs , 访问的不在访问,这样每个访问到的边 就是要保留的边,没访问到的就是要删除的。#include #define Siz(x) (int)x.size()u原创 2017-04-12 22:08:33 · 540 阅读 · 0 评论 -
蓝桥杯 历届试题 九宫重排 (八数码问题--康托展开去重 + bfs搜索)
题意:简单的八数码问题:给你两个状态 求最少步数。可以把点变成9:这样,9个数都不一样,相当于是阶乘的排列。直接用bfs 搜索 康托展开去重即可。#include #include #include #include #include #include #include #include #define Siz(x) (int)x.size()#defi原创 2017-04-20 20:45:13 · 1689 阅读 · 2 评论 -
CCF 习题 201604-4 游戏 (BFS -- 三维vis数组)
大体题意:求从左上角到右下角的最短时间,每一个位置有一段危险时间,在危险时间内,你不能到达这个位置!思路:直接bfs即可!因为样例分析出来,这个是可以走回头路的!所以普通的vis数组 只记录坐标肯定是行不通的,但如果不用vis数组,能过的样例太少了! 剩下的都超时!可以用一个三维的vis数组!在记录位置的同时,同时也记录到达这个位置的时间,这样会优化了不少!详细原创 2016-09-08 00:01:03 · 873 阅读 · 0 评论 -
CCF 习题 201312-5 I’m stuck! (BFS)
题意不说了,中文的题意。思路:普通的bfs即可!第一个bfs,判断由起点是否可以到达终点,并且从起点能到达的点标记出来!(方便第二个bfs),如果可以到达终点,ok =1 ,最后只需要判断ok 是不是1 就可以处理其中一个答案!第二个bfs 判断 从标记的点中是否不可以到达终点,暴力枚举一遍即可!其中S + T 这三个字符可以一起处理,因为可以向四周走嘛!| - 这两个原创 2016-09-07 15:54:58 · 819 阅读 · 0 评论 -
HDU 5876 Sparse Graph (另类BFS -- 补图的最短路)
大体题意:给你一个稀疏图,原图是这个稀疏图的补图,告诉你起始位置S,求从原图S位置出发,求从S到每个位置的最短路!(路的权值都是1),如果到不了的输出-1!思路:很强的一个题,自己一点思路都没有,用dijkstra 想了许久,赛后补得!这是一个求补图的最短路问题,看了许多学长的博客!都认为这是一个经典问题,,看来还差的远啊!用BFS,思路比较巧妙!首先是建图,建图肯定不能建原创 2016-09-14 21:24:42 · 957 阅读 · 0 评论 -
习题 6-5 UVA 1600 Patrol Robot 巡逻的机器人
和普通的bfs基本一样,只不过多了一个可以穿越的障碍的条件!思路:建立一个三维数组vis表示是否访问过,第三维表示穿越的障碍数量。结构体中包括坐标,步数,障碍数。教训:之前错一次,因为开成了二维数组,但仔细想想的话,开二维数组表示是否访问,可能会被其他同样的条件给覆盖掉!代码如下:#include#include#include#includeusing原创 2016-02-27 15:58:57 · 597 阅读 · 0 评论 -
例题6-20 UVA 1599 Ideal Path理想路径
思路和书上思路一样!先 从终点BFS,用d数组记录到终点的最短距离,直接从0开始不断加1即可!扫到起点后,在从起点开始BFS,走路的条件必须满足,下一个路 加 1 等于这个路,而且没有访问过 vis[i] = 0,然后在是字典序最小(把所有字典序最小的全部加入!)最后存入答案时,用step 记录从1走到当前步的步数,这个数值就是答案的 索引,最后答案存入所有路中最小字典序就行了!这原创 2016-03-03 16:17:08 · 657 阅读 · 0 评论 -
UVA 122 && HDU 1622 Trees on the level(构造二叉树+BFS层序遍历)
Trees on the levelTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 783 Accepted Submission(s): 268Problem DescriptionTrees are原创 2016-06-09 22:22:49 · 831 阅读 · 0 评论 -
团体程序设计天梯赛-练习集 -- L3-010. 是否完全二叉搜索树
L3-010. 是否完全二叉搜索树时间限制 400 ms内存限制 65536 kB代码长度限制 8000 B判题程序 Standard 作者 陈越将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果。原创 2016-07-16 21:17:24 · 789 阅读 · 0 评论 -
团体程序设计天梯赛-练习集L2-011 玩转二叉树(构造二叉树+BFS)
L2-011. 玩转二叉树时间限制 400 ms内存限制 65536 kB代码长度限制 8000 B判题程序 Standard 作者 陈越给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不原创 2016-06-16 00:26:43 · 2390 阅读 · 0 评论 -
2016年团体程序设计天梯赛-模拟赛 L3-1. 肿瘤诊断 (三维 BFS)
L3-1. 肿瘤诊断时间限制 400 ms内存限制 65536 kB代码长度限制 8000 B判题程序 Standard 作者 陈越在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环。给定病灶扫描切片中标注出的疑似肿瘤区域,请你计算肿瘤的体积。输入格式:输入第一行给出4个正整数:M、N、L、T原创 2016-05-15 18:39:57 · 1915 阅读 · 0 评论 -
POJ 3170 Knights of Ni (双向BFS打表记录)
Knights of NiTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 2032 Accepted: 872DescriptionBessie is in Camelot and has encountered a sticky situation: she原创 2016-07-28 18:30:53 · 687 阅读 · 0 评论 -
POJ 3310 Caterpillar (BFS + DFS + 并查集)
CaterpillarTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 2289 Accepted: 1074DescriptionAn undirected graph is called a caterpillar if it is connected,原创 2016-08-19 00:33:39 · 719 阅读 · 0 评论 -
CodeForces 589J -- J. Cleaner Robot (BFS)
J. Cleaner Robottime limit per test 2 seconds memory limit per test 512 megabytes input standard input output standard output Masha has recently bought a cleaner robot, it can clean a floor原创 2016-08-11 00:42:11 · 1050 阅读 · 0 评论 -
蓝桥杯 历届试题 大臣的旅费 (树的直径 BFS)
题意:给你一棵树,求树上最长距离。思路:也就是求树的直径两遍bfs即可, 第一次从任意一个点开始bfs, 找出最长距离, 并记录点在哪(记为s),那么s 一定是树直径上的一个端点。在从s bfs一遍即可。原理: 设起点为u,第一次BFS找到的终点v一定是树的直径的一个端点证明:1) 如果u 是直径上的点,则v显然是直径的终点(因为如果v不是的话,则必定存在另一个点w原创 2017-05-15 20:46:56 · 515 阅读 · 0 评论