
数据结构-各种搜索
文章平均质量分 72
Flynn_curry
这个作者很懒,什么都没留下…
展开
-
牛客oj 习题9.2神奇的口袋(DFS)&& poj2362 Square(DFS)
最基础的暴搜,连枝都没剪都能过,好水啊。。。#include <cstdio>#include <iostream>#include <algorithm>#include <string>#include <cstring>#include <vector>#include <sta...原创 2020-03-19 10:13:44 · 263 阅读 · 0 评论 -
牛客oj 习题9.3 八皇后(N皇后问题)&& 习题10.6 谁是你的潜在朋友(map)
N皇后模板题,顺便复习一下N皇后:首先给出三个数组,列数组,主对角线数组,副对角线数组,代表行/对角线是否被占用。因为每一行只能放一个元素,所以每遍历一次如果他可以放(即对应列和两个对角线上都没皇后)就标记一个,代表这个元素放置后他的列以及对角线都被占用,如此不断递归即得答案。PS:这题输入样例又有问题,没有Case。#include <cstdio...原创 2020-03-18 16:49:41 · 305 阅读 · 0 评论 -
poj2488 A Knight's Journey(DFS+国际象棋坐标系)
这题其实只有一点需要注意,就是国际象棋坐标系的选取。国际象棋有个特点,标号的时候行为数字1~8,列为字母A~H,行从上到下为纵方向,列从左到右为横方向。不同于一般的坐标系,上个图就明白了:剩下的就是普通的深搜了。#include <cstdio>#include <iostream>#include <algorithm&...原创 2020-03-18 12:32:10 · 366 阅读 · 0 评论 -
牛客oj 习题9.1 玛雅人的密码(BFS)
BFS大水题。由于有两个2、一个1、一个0的字符串中经过有限次移位后必定会得到2012,所以只有这些元素不够的情况会出现解不开密码。剩下的也没什么好说的,就是移位后判断如果没有2012就入队。#include <cstdio>#include <iostream>#include <algorithm>#include <...原创 2020-03-13 20:32:53 · 264 阅读 · 0 评论 -
牛客oj 习题8.3 2的幂次方(DFS)
挺不错的递归题,给出一个数,将他拆成只有0~2次幂的形式。把一个数拆成2的幂次的形式,这不就是我们熟悉的二进制吗!所以本题思路就是先将一个数转化成二进制形式,顺序处理二进制数位,如果位数大于等于3,那么继续拆(即转成二进制);如果位数小于等于3,那么做出相应输出。最后再去个头尾,搞定。PS:这种题只要能写出来就肯定会通过的吧。。#include <cstdi...原创 2020-03-13 17:53:26 · 358 阅读 · 0 评论 -
牛客oj 习题8.1杨辉三角形(DFS)&&习题8.2全排列(DFS)
我比较笨,没想出讨论中绝大部分人的做法,不过还是把他A了。用容器模拟了DFS做出来,话说刚开始以为这题输出有问题,因为相当于杨辉三角形砍了个头。话说讨论里那种做法也挺神奇,直接处理编号,我还以为起码要处理个数组啥的。。。另外这题注意c++中临时变量不能作为非const的引用参数,也就是引用传参只能传一个确定参数,不能传一个或多个变量的表达式。#include ...原创 2020-03-13 09:35:22 · 326 阅读 · 0 评论 -
hdu1175 连连看(bfs求拐弯次数)
http://acm.hdu.edu.cn/showproblem.php?pid=1175题意:中文题不解释。思路:核心就和hdu1728一样,思路请看我的分析。有了上一题的基础,这题就是割草小游戏了,1A~好久木有1A了,感动#include #include #include #include #include #include #includ原创 2016-10-23 21:39:43 · 518 阅读 · 0 评论 -
hdu1242 Rescue(优先队列bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1242题意:#为墙,.为路,r为其朋友,a天使,x为怪物,每打一个怪物消耗1时间,求能够救到公主的最短时间。思路:宽搜经典题。结合《挑战》的思想,"搜索时首先将初始装态加入到队列中,此后从队列的最前端不断取出状态,把从该状态可以转移到的状态中尚未访问过的部分加入队列,如此往复,直至队列被取空或原创 2015-11-08 08:44:41 · 641 阅读 · 0 评论 -
hdu1026 Ignatius and the Princess I(bfs+路径)
http://acm.hdu.edu.cn/showproblem.php?pid=1026题意:求最短路长度、路径,有打怪操作,同样在路径中输出。思路:很好的练习题吧,今天(2016/10/24)第二次做,打怪地方的标记初始化放在了结构体中,半天找不出错。好在改好了,1A~。#include #include #include #include #incl原创 2015-11-08 21:08:28 · 389 阅读 · 0 评论 -
poj3984 迷宫问题(bfs+路径)
http://poj.org/problem?id=3984题意:给你个5x5矩阵,输出左上角到右下角的路径。思路:用栈记录,细心。#include #include #include #include #include #include #include using namespace std;typedef long long LL;co原创 2016-10-23 09:31:52 · 378 阅读 · 0 评论 -
hdu1501 Zipper(dfs && dp)
挺不错的题。第一反应是模拟字符串匹配,但第二个样例就否定了。str1 = cat, str2 = tree, str = catrtee,当主串匹配到第四个字符t时,问题来了,是匹配第一个的还是第二个的?模拟的话两个判断条件会有个顺序,但一旦有顺序就会导致其中一种匹配不成功,所以换思路。一种是简单的深搜,一种是简单的dp,思路都很清晰。dfs:#include原创 2016-04-17 16:06:55 · 907 阅读 · 0 评论 -
hdu1728 逃离迷宫(bfs限制拐弯次数)
http://acm.hdu.edu.cn/showproblem.php?pid=1728题意:给你一张图,*代表墙,.代表路,给你起点终点坐标和限制的拐弯次数,求起点是否可以在拐弯次数内到达终点。思路:经典的bfs。一般搜索题限制的是走的步数,而这题限制的是拐弯次数。按照我想的土办法,结构体里添加拐弯次数,每走一步判断是否拐弯,最后把能够到达终点的路线的拐弯次数统计下来求最原创 2016-10-23 13:13:30 · 2294 阅读 · 1 评论 -
hdu1664 放苹果(经典简单dfs)
http://poj.org/problem?id=1664题意:经典的m个苹果分给n个盘,求问多少种分发。思路:刚开始想用并查集做这题,后来才知到居然深搜就行。既然是深搜,就要全部情况都考虑好,边界也要处理好。搜索终止条件,苹果树为1,那只有一种了;盘子为1,那全放进去,也是一种;当苹果数为0,题目中说允许有盘子空着不放,那这也算一种= =[金馆长脸]。然后考虑边界,原创 2016-05-23 19:56:43 · 869 阅读 · 0 评论 -
hdu1142 A Walk Through the Forest(spfa+记忆化搜索)
http://acm.hdu.edu.cn/showproblem.php?pid=1142题意:n个点m个关系,起点是1,终点是2(家)。这里主人公每当选择路A到B时有一个要求:“if there exists a route from B to his home that is shorter than any possible route from A”,翻译为家到B的最短路小于家到原创 2016-10-19 21:51:37 · 303 阅读 · 0 评论 -
hdu2614 Beat(简单dfs)
http://acm.hdu.edu.cn/showproblem.php?pid=2614题意:给你一个二维数组,Map[i][j]代表做完i题做j题的难度。这个人做题不愿意做比上一道简单的,求他最多能做几道题。思路:题中说从第0到题开始做,所以从0开始搜索,搜索过程中统计最大值即可。#include #include #include #include原创 2016-05-25 21:53:52 · 387 阅读 · 0 评论 -
poj1064 Cable master(二分搜索)
http://poj.org/problem?id=1064题意:有N条绳子,他们的长度分别为Li,如果从他们中切割出长度相同的绳子的话,这K条绳子每条最长能有多长?保留两位小数。思路:偶然看到《挑战》上有二分搜索,以前见过的二分好像都是查找哎,做一做吧。二分居然可以这样处理问题,好神奇。相当于加了条件的搜索,找一个无限精确于标准答案的绳子长度。我的理解哈,二分查找是在数的范围原创 2016-10-30 22:12:28 · 455 阅读 · 0 评论 -
hdu1078 FatMouse and Cheese(记忆化搜索)
http://acm.hdu.edu.cn/showproblem.php?pid=1535题意:老鼠在一个图内藏了许多奶酪,输入图中每个方格中有若干奶酪。老鼠一次可以移动k个单位(每个方格一个单位),然后吃掉该方格的所有奶酪。但是每吃掉奶酪后这个老鼠就会变胖而失去行动力,要想继续移动(必须移动,因为后面有猫追着),必须移动到下一个更多奶酪的地方补充能量,完毕后才能继续移动。老鼠不能越界。原创 2016-02-23 15:53:25 · 320 阅读 · 0 评论 -
hdu1978 How many ways(记忆化搜索)
http://acm.hdu.edu.cn/showproblem.php?pid=1978题意:中文题。思路:注意这题题中说“当机器人选择了一条可行路径后,当他走到这条路径的终点时,他将只有终点所标记的能量”。刚开始这条件我就看了半天,这句话中明确指出大的能量转移(不包括每走一步的能量减一)只有一个条件可以触发,那就是到达终点,其他没说明的就表明无法触发。(有异议的欢迎撕逼,原创 2016-11-19 18:20:40 · 432 阅读 · 0 评论 -
hdu1331 Function Run Fun(记忆化搜索)
http://acm.hdu.edu.cn/showproblem.php?pid=1331题意:给出一些递推的条件,求最后的得数。思路:记忆化搜索无疑。虽说是一道水题,但是也有令我吃惊的地方。就是越界那两个条件,如果放到递推外面还要处理负值情况,好麻烦的说。仅仅把他们放在递推里面的判断dp值大小之前就可以解决这问题,代码看起来非常简洁。也许一个非常简单的写法会解决很多问题,真原创 2016-11-19 21:28:44 · 446 阅读 · 0 评论 -
hdu2553 N皇后问题(回溯dfs)
刚开始怎么也想不通怎么斜向判断,看了详解,服了。。戳这里N皇后详解准确的说他是用了滚动数组,分别用三行记录正对角线,纵向,反对角线方向所放置过皇后所能影响的状态记录。若在攻击范围内,则标记1。而且越想越觉得精妙,数组是动态的,dfs遍历每行,for遍历每列,每个状态的判断都在前一个判断的基础上,而且加之回溯节省时间,再加上打表的小技巧,这样的程序真的难得一见哪。。。ps:开原创 2016-02-29 19:02:38 · 534 阅读 · 0 评论 -
hdu1045 Fire Net(dfs水)
尼玛啊,一道很普通的深搜居然因为括号问题改了这么长时间,自己改代码的能力好低啊。。。不过通过本题还是能感觉到dfs的强大,一个while居然可以遍历几乎整个图。。。#include #include #include #include #include using namespace std;const int N = 30;const int INF = 1000000原创 2016-02-28 21:06:27 · 333 阅读 · 0 评论 -
hdu1548 A strange lift(bfs水)
第二次因为queue设为全局变量而WA,仅仅变了下顺序就A,真是搞不懂嘛意思。这道题让我们懂得了bfs不止可以处理迷宫= =。基础题速度必须要上来了。#include #include #include #include #include using namespace std;const int N = 209;const int INF = 1000000;in原创 2016-03-05 09:07:37 · 251 阅读 · 0 评论 -
hdu2612 Find a way(2次bfs)
本题思路还是很简单的,只要方法用对。先用结构体吧KFC的坐标存好,然后用一个二维数组将两人的时间花费和加到该点,最后遍历每个KFC点求最小值。ps:今天周五,明后两天可是开学的周末,大好时光啊!可是今天晚上做题欲望突然变特差,看了好多不该看的东西。五日三省吾身,一个人好好想想自己是谁,控制好自己的时间!#include #include #include #include原创 2016-03-04 21:46:13 · 329 阅读 · 0 评论 -
hdu2102 A计划(2层bfs)
看的别人的思路写,还WA了n次,我的心是崩溃的以后三维坐标统一变成x为z轴好了,省夜长梦多。。。还有最fuck的一点,我吧queueq定义为全局变量,居然显示WA。实在是不解啊#include #include #include #include #include using namespace std;const int N = 20;const int INF =原创 2016-03-04 09:36:15 · 380 阅读 · 0 评论 -
hdu1312 Red and Black(搜索基础)
#include #include using namespace std;const int maxv = 10000 + 10;char map[maxv][maxv];int m, n;int count;int dir[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};void DFS(int a, int原创 2015-11-03 19:37:59 · 357 阅读 · 0 评论 -
hdu2899 Strange fuction(二分兼三分)
好久没做数学导数都想不过来了= =,本题是F''(x)恒大于0,所以F'(x)递增,零点以前的F(x)都是减函数,所以以零点为判断标准就行了。而且事实证明无法用宏定义二变量函数。#include #include #include #include #include #include using namespace std;const int N = 100;const原创 2016-03-02 20:22:37 · 358 阅读 · 0 评论 -
hdu2199 Can you solve this equation?(二分)
搜索四处碰壁,来二分玩玩。。。有点注意点就是pow的用法和浮点数的处理吧,不过我还是第一次用二分的思想,尤其是中间的while取极限值,这好像只限于计算机吧,手算根本不行。。。真是越搞越神奇啊。。。#include #include #include #include #include #include using namespace std;const int N原创 2016-03-02 18:51:02 · 338 阅读 · 0 评论 -
hdu1584 蜘蛛牌(经典dfs)
真是好题啊。。。刚开始一看下一个状态是由上一个子问题得来的,想DP上去了,结果找不出状态方程,一百度是数位DP,还是dfs吧= =。。。这题的dfs也很奇葩,我对dfs理解还浅啊,刚开始怎么也想不到怎么用dfs还不在更新数组的情况下。于是。。。对我来说还是太难了T T这题越想越牛逼,本来我还不服,怎么实现移动的牌按字典序?我们来个例子,先是最简单的1,2,3,4顺序:1原创 2016-03-01 21:32:02 · 3236 阅读 · 1 评论 -
hdu1241 Oil Deposits(dfs)
#include #include using namespace std;const int maxv = 10000 + 10;char map[maxv][maxv];int m, n;void DFS(int a, int b){ if((map[a][b] != '@') || (a m-1) || (b > n-1))原创 2015-11-02 21:46:06 · 378 阅读 · 0 评论 -
hdu1372 Knight Moves(马步bfs水)
仅仅是变成8个方向而已。#include #include #include #include #include using namespace std;const int N = 20;const int INF = 1000000;bool vis[N][N];int dir[8][2] = {{-2, 1}, {-2, -1}, {-1, 2}, {-1, -2}原创 2016-03-05 10:35:15 · 255 阅读 · 0 评论 -
hdu2717 Catch That Cow(bfs水)
真的是,太水了。。。原来bfs也有这么多水题#include #include #include #include #include using namespace std;const int N = 1000005;const int INF = 1000000;bool vis[N];int st, ed, n;int dir[2] = {1, -1};str原创 2016-03-05 13:20:05 · 441 阅读 · 0 评论 -
hdu3111 Sudoku(DFS水)
有了上题的基础,这题就没难度了。#include #include #include #include #include using namespace std;const int N = 30;const int INF = 1000000;int Map[N][N];int k, f, flag0;struct node{ int x, y;}roa原创 2016-02-28 18:53:45 · 500 阅读 · 0 评论 -
hdu1426 Sudoku Killer(经典DFS)
看了别人的,思路很明确,但敲起来很困难,输入输出都要注意,越是长的题就越不容易找错误,还需要好好理解啊。。。PS:今天上午看了库里的封神战,有点感触,我们的努力不会白费,未来的奇迹就是由这些努力创造的!#include #include #include #include #include using namespace std;const int N = 30;cons原创 2016-02-28 15:43:09 · 452 阅读 · 0 评论 -
hdu1896 Stones(优先队列水)
ahhh刚开始不知道怎么输入,是一个一个输跟着处理,还是全输好存起,可是一看1000000的数据量就不知道怎么搞了。。。看了别人的没想到队列居然能忍受这么大的数据,于是就开始敲,按着自己的思路,奇数的入队列,偶数的出队列,位置累加,终于1A了(好久没有一次A掉了)#include #include #include #include #include using namespace原创 2016-03-06 21:13:36 · 487 阅读 · 0 评论 -
hdu1509 Windows Message Queue(优先队列水)
好吧我承认重载运算符时还看了一下题解。不过这题真的没问题了。#include #include #include #include #include using namespace std;const int N = 5000;const int INF = 1000000;struct node{ int w, par, ord; char name原创 2016-03-06 19:53:21 · 342 阅读 · 0 评论 -
hdu4006 The kth great number(优先队列)
可喜可贺!终于按照自己的想法A了第一道优先队列题,虽然WA了4次,但还是很开心。刚开始想输出第三大数,那每次输出的时候都把第k个以前的都存起来出队列,输出第k个后再入队列回去,后来果断超时(噗)。然后就想干脆只弄k个有效值,队列满了k个就和队首判断然后输出,中间还有几次失误,不过还好A了~#include #include #include #include #include原创 2016-03-06 19:09:28 · 337 阅读 · 0 评论 -
hdu2527 Safe Or Unsafe(哈夫曼树水)
#include #include #include #include #include using namespace std;int a[30];char s[1005];struct node{ int w; friend bool operator { return aa.w >原创 2015-11-30 19:17:44 · 585 阅读 · 0 评论 -
hdu1053 Entropy(哈夫曼树)
#include #include #include #include #include using namespace std;int a[30];char s[1005];struct node{ int w; friend bool operator { return aa.w >原创 2015-11-30 19:56:50 · 566 阅读 · 0 评论 -
hdu1180 诡异的楼梯(优先队列bfs)
#include #include #include #include #include using namespace std;const int N = 50;const int INF = 1000000;char Map[N][N];bool vis[N][N];int n, m;int dir[4][2] = {{1, 0}, {-1, 0}, {0, 1},原创 2016-03-05 22:17:53 · 1878 阅读 · 2 评论 -
hdu1016 Prime Ring Problem(回溯dfs)
本题是回溯,遍历过程就好像一棵树,需要点想象力哈~,一旦树到了尾部即输出,而且输出后并不清空,回溯后继续寻找其他解并输出。注意本题说的是相邻数的和是素数,并不是每个数都是素数。还有网上发现个效率特高德素数打表法,分享下咯!#include #include #include using namespace std;const int N = 30;const int IN原创 2016-03-01 14:27:30 · 346 阅读 · 0 评论