算法---搜索
文章平均质量分 58
pengwill97
C.S Master
展开
-
HDOJ(HDU).1045 Fire Net (DFS)
HDOJ(HDU).1045 Fire Net [从零开始DFS(7)]点我挑战题目从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] — DFS思想与框架/双重DFS HDOJ.1010 Tempter of the Bone [从零开始DFS(1)] —DFS四向搜索/奇偶剪枝 HDOJ(HDU).1015 Safecracker [从零开始DFS(2)] —原创 2017-02-09 14:26:09 · 987 阅读 · 0 评论 -
POJ.3278 Catch That Cow (BFS)
POJ.3278 Catch That Cow (BFS)题意分析求最少的操作次数,暴力就用BFS。 这题坑点挺多,一开始交上去无限RE,摸不着头脑,后来发现后数组越界了。因为存在-1的操作和*2的操作 ,不加判断就直接越界。 这告诉我们一个道理,光把数组开大点,是没有用的。代码总览#include <iostream>#include <cstdio>#include <algorithm原创 2017-04-30 17:18:19 · 238 阅读 · 0 评论 -
URAL.1033 Labyrinth (DFS)
URAL.1033 Labyrinth (DFS)题意分析WA了好几发,其实是个简单地DFS。意外发现这个俄国OJ,然后发现ACRUSH把这个OJ刷穿了。代码总览#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <sstream>#include <set>#include原创 2017-04-30 17:25:30 · 277 阅读 · 0 评论 -
POJ.3172 Scales (DFS)
POJ.3172 Scales (DFS)题意分析一开始没看数据范围,上来直接01背包写的。RE后看数据范围吓死了。然后写了个2^1000的DFS,妥妥的T。 后来想到了预处理前缀和的方法。细节以注释的方式给出。代码总览#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <sst原创 2017-04-30 18:13:30 · 216 阅读 · 0 评论 -
POJ.1321 棋盘问题 (DFS)
POJ.1321 棋盘问题 (DFS)题意分析给出n*n的棋盘,棋盘中#表棋盘区域,即可以放置棋子。现在有k个棋子,放置在棋盘区域中,并且要求任意两个棋子不能放在棋盘的同一行或者同一列。求放置k个棋子的方案数有多少。如果要求不能放在同一行,那么在摆放的时候可以按行摆放。现在一行中找到能摆放的#的位置,然后放在这个位置上,dfs递归进入下一行,在下一行再找到合适的位置,如果剩余的棋子个数为0的时候,方原创 2017-07-28 22:52:59 · 460 阅读 · 0 评论 -
POJ.2251 Dungeon Master (三维BFS)
POJ.2251 Dungeon Master (三维BFS)题意分析你被困在一个3D地牢中且继续寻找最短路径逃生。地牢由立方体单位构成,立方体中不定会充满岩石。向上下前后左右移动一个单位需要一分钟。你不能对角线移动并且迷宫四周坚石环绕。 若能逃离,则输出逃离需要的最短时间,否则输出Trapped!。与二维BFS的差别在于,多了一个上下两层。所以除了先后左右移动,还要有上下移动,对于每个位置,总共原创 2017-07-28 23:00:04 · 287 阅读 · 0 评论 -
POJ.3278 Catch That Cow (BFS)
POJ.3278 Catch That Cow (BFS)题意分析给出给出初始坐标N,你可以执行的操作有N-1,N+1,N*2,求出最少需要几次操作,使得N=K。BFS时每次有3种操作,按照操作来即可。特别需要注意越界的问题,坐标不能小于0,也不能大于题目给的最大值100000.然后就没太大问题。一开始因为忘记数组越界的问题,RE了几次。代码总览#include <queue>#include <原创 2017-07-28 23:03:51 · 190 阅读 · 0 评论 -
POJ.3279 Fliptile (搜索+二进制枚举+开关问题)
POJ.3279 Fliptile (搜索+二进制枚举+开关问题)题意分析题意大概就是给出一个map,由01组成,每次可以选取按其中某一个位置,按此位置之后,此位置及其直接相连(上下左右)的位置(如果有)的0变成1,1变成0。现在求需要按多少次,才能使得整个map全部变成0。此题解法与 UVA.11464 Even Parity 有异曲同工之妙。首先可以看出,最多每个位置按一次,因为再按的话,相当于原创 2017-07-28 23:18:02 · 310 阅读 · 0 评论 -
POJ.1426 Find The Multiple (BFS)
POJ.1426 Find The Multiple (BFS)题意分析给出一个数字n,求出一个由01组成的十进制数,并且是n的倍数。思路就是从1开始,枚举下一位,因为下一位只能是0或1,故这个数字只能是1 * 10或者1 * 10 + 1。就按照这种方式枚举,依次放入队列,如果是其的倍数,就输出。一开始没理解题意,以为是找一个能整除的二进制数,错了半天。代码总览#include <cstdio>原创 2017-07-28 23:23:46 · 254 阅读 · 0 评论 -
POJ.3126 Prime Path (BFS)
POJ.3126 Prime Path (BFS)题意分析给出一个四位的起始素数sta和一个四位的终止素数end, 保证end>=sta. 每次我们可以对这个sta变化它的一位,使得它变成一个新的数字,但是这个数字必须是素数。求得从sta变到end最小的操作次数。首先需要打一个10000级别素数表,然后我们每次对数字bfs,枚举它的每一位,并且枚举每一位的所有情况,从0-9.因为素数并不是很多,所以原创 2017-07-28 23:30:59 · 204 阅读 · 0 评论 -
POJ.3414 Pots (BFS)
POJ.3414 Pots (BFS)题意分析给你两个容器,分别能装下A升水和B升水,并且可以进行以下操作 FILL(i) 将第i个容器从水龙头里装满(1 ≤ i ≤ 2); DROP(i) 将第i个容器抽干 POUR(i,j) 将第i个容器里的水倒入第j个容器(这次操作结束后产生两种结果,一是第j个容器倒满并且第i个容器依旧有剩余,二是第i个容器里的水全原创 2017-07-29 00:31:32 · 262 阅读 · 0 评论 -
FZU.2150 Fire Game (BFS)
FZU.2150 Fire Game (BFS)题意分析有两个人玩游戏,给出一个N*M的board,board上有一些草(用#表示)和一些空白部分(用.表示)。两个人分别选取一个点放火。求最少需要多长时间,board上的草能烧完。 注意.是不能被点燃的。可以分别记录草坪的位置,然后每次选取两个枚举,检查当前烧完需要多长时间,在所有情况中取最小的即可。代码总览#include <cstdio>#i原创 2017-07-29 10:17:58 · 192 阅读 · 0 评论 -
POJ.3894 迷宫问题 (BFS+记录路径)
POJ.3894 迷宫问题 (BFS+记录路径)题意分析定义一个二维数组: int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。一个5 × 5的原创 2017-07-29 10:32:07 · 320 阅读 · 0 评论 -
HDU.1495 非常可乐 (BFS)
题意分析大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为。因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多。但seeyou的手中只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S< 101)毫升 (正好装满一瓶) ,它们三个之间可以相互倒可乐 (都是没有刻度的,且 S==N+M,101>S原创 2017-07-29 10:36:39 · 1192 阅读 · 0 评论 -
HDU.2612 Find a way (BFS)
HDU.2612 Find a way (BFS)题意分析圣诞节要到了,坤神和瑞瑞这对基佬想一起去召唤师大峡谷开开车。百度地图一下,发现周围的召唤师大峡谷还不少,这对基佬纠结着,该去哪一个。。。坤神:我要去左边的这个(因为离自己比较近 哈哈~)。。瑞瑞:我要去右边的这个(因为离自己比较近 嘿嘿~) ……..这对基佬闹矛盾了,开车有危险了! 为了不让他们去召唤师大峡谷坑人,riot决定让他们去X召唤原创 2017-07-29 10:41:59 · 308 阅读 · 0 评论 -
POJ2246 Matrix Chain Multiplication (DFS)
题意分析给出几个矩阵的规模,和几个矩阵的相乘的式子,计算这个矩阵相乘的式子是否合理,如果合理请给出乘法要计算多少次。在处理矩阵表达式的时候有点类似 括号匹配的问题。 如果当前位置是一个左括号,那么我们就继续递归的调用处理表达式的函数,直到读到不是括号(即矩阵),然后就载入当前矩阵的行列信息。并返回该矩阵对象。在读到两个矩阵之后,判断是否满足相乘的条件,即前一个矩阵的列数是否等于第二个矩...原创 2018-03-07 21:44:20 · 216 阅读 · 0 评论 -
HDU1372 Knight Moves (BFS)
题意分析在国际象棋棋盘中给出两个点,问马从一个点到另一个点最少需要跳几步。国际象棋中的马和中国象棋的马没有什么区别,只是没有蹩马腿这一说。然后就是裸地BFS了。代码总览#include<bits/stdc++.h>#define ll long longusing namespace std;const int nmax = 10;const int n...原创 2018-03-07 21:47:07 · 236 阅读 · 0 评论 -
UVA.129 Krypton Factor (搜索+暴力)
UVA.129 Krypton Factor (搜索+暴力)题意分析搜索的策略是:优先找长串,若长串不合法,则回溯,继续找到合法串,直到找到所求合法串的编号,输出即可。 注意的地方就是合法串的判断,根据后缀的规则来判断,枚举后缀长度[1,len/2],后缀中是否有重复子串,若是的话表明不是合法串。 还有一个注意的地方,每次递归调用时,序号就要+1,无论是回溯回来的递归,还是深度搜索的递归,因为没原创 2017-04-18 22:59:32 · 308 阅读 · 0 评论 -
AOJ.865 青铜莲花池 (BFS)
AOJ.865 青铜莲花池 (BFS)题意分析典型的BFS 没的说代码总览#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <sstream>#include <set>#include <map>#include <queue>#include <stack>#in原创 2017-04-28 21:14:17 · 482 阅读 · 0 评论 -
HDOJ(HDU).1258 Sum It Up (DFS)
每组数据给出要凑出的目标数字num和数字个数n,然后依次给出n个数字。要求从n个数字中选出若干个数字,是的数字之和为nun。**重复的组合只输出一次。**和之前做过的选数字的题目类似,也可以采用DFS的思想来做。这道题与[ HDOJ.1342 Lotto [从零开始DFS(0)]](http://blog.csdn.net/pengwill97/article/details/54850852)及其的相似:每个数原创 2017-02-08 21:17:16 · 846 阅读 · 0 评论 -
HDOJ(HDU).1241 Oil Deposits(DFS)
HDOJ(HDU).1241 Oil Deposits(DFS) [从零开始DFS(5)]点我挑战题目从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] — DFS思想与框架/双重DFS HDOJ.1010 Tempter of the Bone [从零开始DFS(1)] —DFS四向搜索/奇偶剪枝 HDOJ(HDU).1015 Safecracker [从零开始原创 2017-02-08 19:37:38 · 1093 阅读 · 0 评论 -
HDOJ(HDU).1035 Robot Motion (DFS)
HDOJ(HDU).1015 Robot Motion [从零开始DFS(4)]点我挑战题目题意分析给出地图规模n * m, 给出入口坐标(0,y),遵循以下规则,求解机器人能否走出地图。若能,输出走出地图所需要的步数,若不能,输出进入循环前走的步数和循环的步数。规则: 若当前格子为N,则只能向上走,若为S向下走,E向右走,W向左走。我第一感觉是模拟题,因为对于每个格子状态是唯一的,只有1组解:要原创 2017-02-06 20:27:51 · 944 阅读 · 1 评论 -
HDOJ(HDU).1016 Prime Ring Problem (DFS)
HDOJ(HDU).1015 Safecracker [从零开始DFS(3)]题意分析给出数字n,要求将1-n的数字填成素数环,即相邻2个数字的和为素数,按字典序依次输出所有可能的组合。并且题目说过所有的组合开头均为1。 哎呀这题太熟悉了,又是填数字的题目,似曾相识的感觉。 讨论过的填数字的题目,传送门: HDOJ(HDU).1342 Lotto [从零开始DFS(0)] HDOJ(HDU).原创 2017-02-05 22:44:03 · 983 阅读 · 2 评论 -
HDOJ(HDU).1015 Safecracker (DFS)
HDOJ(HDU).1015 Safecracker [从零开始DFS(2)]题意分析首先默认有个字母到数字的映射,A=1,B=2,C=3 …… Z=26,给出你一个目标数字target,然后给出一串字母,要求从这些字母中选取5个数字vwxyz,满足 v - w^2 + x^3 - y^4 + z^5 = target。可能有多组解,只输出字典序最大的那个。嗨呀一看到这道题,是否有种似曾相识的感觉原创 2017-02-05 19:22:50 · 1904 阅读 · 1 评论 -
HDOJ.1010 Tempter of the Bone (DFS)
Tempter of the Bone [从零开始DFS(1)]题意分析给出一张大小为n * m的地图,其中: X代表墙壁,走不通; S代表起点; D代表终点; . 代表空白区域,即可以走通。 求解是否正好可以在第T步的时候走到终点,并且不能走回头路(即走过的地方不能再走)。 典型的地图搜索问题嘛,首先想到的就是DFS。先回顾一下上次探讨的内容。 传送门: HDOJ.1342 Lot原创 2017-02-04 15:49:33 · 1303 阅读 · 1 评论 -
HDOJ.1342 Lotto (DFS)
Lotto点我挑战题目题意分析给出k(6 < k < 13)个数字,要求从这k个数字中选出升序的6个数字,并且按照字典序输出全部的可能,给出的k个数字已经按照升序排列好。 乍一看以为是排列组合,怎么想也想不到是用dfs来解决。按照这个数字选或者不选的逻辑,以为是dp什么的。最后看了题解才知道用dfs的方法做,也算是长见识了。作为dfs的第一道题,好好写,纪念一下。 dfs一般采用递归写法,或许是原创 2017-02-03 23:17:51 · 2360 阅读 · 4 评论 -
POJ.1416 Shredding Company (DFS)
POJ.1416 Shredding Company [从零开始DFS(8)]点我挑战题目题意分析给出一个目标数字n和一串数字序列s,要求切割序列s为若干数字段s1,s2,s3……sn,最后求出最大的 不超过目标数字n的 序列s切割方式,和这些字段的和。若对于最大的数字有多种切割方式,则输出rejected;若没有这样的切割方式,则输出error。直接对给出的数字串操作有些不方便,我们不妨想想挡板原创 2017-02-14 00:23:42 · 408 阅读 · 0 评论 -
HDOJ(HDU).2266 How Many Equations Can You Find (DFS)
HDOJ(HDU).2266 How Many Equations Can You Find (DFS) [从零开始DFS(9)]点我挑战题目从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] — DFS思想与框架/双重DFS HDOJ.1010 Tempter of the Bone [从零开始DFS(1)] —DFS四向搜索/奇偶剪枝 HDOJ(HDU).101原创 2017-02-14 00:35:07 · 562 阅读 · 0 评论 -
HDOJ(HDU).2660 Accepted Necklace (DFS)
HDOJ(HDU).2660 Accepted Necklace (DFS)点我挑战题目题意分析给出一些石头,这些石头都有自身的价值和重量。现在要求从这些石头中选K个石头,求出重量不超过W的这些石头的最大价值是多少?类似于之前讨论到的数字选不选的问题,此处面临的情况是石头选不选,若选进行一个dfs,若不选择进行另外一个dfs。考虑递归边界: 1.当选够了K个的时候,终止递归; 2.当当前重量大于原创 2017-02-15 00:46:09 · 346 阅读 · 0 评论 -
UVA.297 Quadtrees (四分树 DFS)
UVA.297 Quadtrees (四分树 DFS)题意分析将一个正方形像素分成4个小的正方形,接着根据字符序列来判断是否继续分成小的正方形表示像素块。字符表示规则是: p表示这个像素块继续分解,e表示当前方格没有像素,即为空,f表示当前像素块为满,黑色。 最后求解两个数合并后的像素块的数量是多少。 最大的像素块数量是1024个。采用数组模拟,根据所给的字符串,递归建树。字符数组的建四分树的原创 2017-03-27 18:46:45 · 741 阅读 · 0 评论 -
UVA.548 Tree(二叉树 DFS)
UVA.548 Tree(二叉树 DFS)题意分析给出一棵树的中序遍历和后序遍历,从所有叶子节点中找到一个使得其到根节点的权值最小。若有多个,输出叶子节点本身权值小的那个节点。 先递归建树,然后DFS求解。代码总览#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <strin原创 2017-03-27 12:31:55 · 293 阅读 · 0 评论 -
UVA.122 Trees on the level(二叉树 BFS)
UVA.122 Trees on the level(二叉树 BFS)题意分析给出节点的关系,按照层序遍历一次输出节点的值,若树不完整,则输出not complete代码总览#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <queue>#include <vector>#原创 2017-03-27 12:37:03 · 301 阅读 · 0 评论 -
UVA.839 Not so Mobile ( 二叉树 DFS)
UVA.839 Not so Mobile ( 二叉树 DFS)题意分析给出一份天平,判断天平是否平衡。 一开始使用的是保存每个节点,节点存储着两边的质量和距离,但是一直是Runtime error。也不知道到底是哪里出了问题,后来发现直接判断当前是否平衡,若下面还有节点,接着递归调用dfs判断,这样一来省去了存储节点所需要的空间和时间,效率大大提升。代码总览#include <iostream>原创 2017-03-27 12:40:56 · 282 阅读 · 0 评论 -
AOJ.866 飞越原野 (三维BFS)
AOJ.866 飞越原野 (三维BFS)题意分析点我挑战题目 相比于普通的BFS,要多一维来记录当前剩余的体力。而且还要额外的一层循环来处理,飞过的路程。代码总览#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <sstream>#include <set>#includ原创 2017-04-28 21:05:13 · 629 阅读 · 0 评论 -
AOJ.863 分书问题 (DFS)
题意分析现有n个人,n种书,给出每人对n种书的喜欢列表,求有多少种方案满足以下条件: 1.每个人都分得自己喜欢的书; 2.每个人分得书的种类各不相同,即所有种类的书均得到分配 1.采用生成测试法 生成过程 对于每个人来说,枚举每本书的状态(0/1),有2^20; 最多有20个人 ,则有20*2^20 = 10*2^21 ≈ 10^3 * 10 ^3 * 10原创 2017-04-28 21:11:52 · 493 阅读 · 0 评论 -
Codevs1004 四子连棋(BFS+Hash)
题意分析BFS很好想,要考虑白色先手和黑色先手两种情况。 移动棋子可以理解为移动空白部分,搜索时要注意: 1. 空白部分不能出界 2. 空白部分不能重叠 3. 移动的棋子要和当前对应要移动的棋子相同判重的话,直接用hash就可以。 这个题hash冲突概率很低了,随便蛤蛤就可以了。代码总览#include<bits/stdc++.h>using names...原创 2018-04-23 21:03:38 · 233 阅读 · 0 评论