![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
深度优先搜索
文章平均质量分 80
玩世彳不恭
这个作者很懒,什么都没留下…
展开
-
HDU 4403 A very hard Aoshu problem
题目链接:A very hard Aoshu problen解题思路:今年广州现场赛感觉就是一模一样的题目,这这这。。。。直接用二进制进行广搜。我们设置由n个数,那么这n个数就有n - 1个位置放置+号,我们将n和数分成a,b两段,a + b = n,那么就有a - 1, b - 1个位置放置加号,那么用二进制把这些位都压缩了,1表示放+,0表示不放。那么我们不用DFS直接一个循环就搞定了。剩原创 2014-12-19 15:52:12 · 335 阅读 · 0 评论 -
HDU 1044 Collect More Jewels
题目链接:Collect More Jewels解题思路:一看又是简单的广搜,还以为水题,所以简单敲了一发,T了。思佳说用BFS + DFS。算了算总状态数50*50*2^10 = 256W, 一共10组,而且还有它给出的时间有可能很多,这样所有宝物都能捡到还能瞎逛。就是宝物逝去序列的所有组合。所以应该先处理两两宝物之间的最短路,和起点到所有宝物的最短路,终点到所有宝物的最短路,全部用BFS跑原创 2014-12-19 16:30:56 · 428 阅读 · 0 评论 -
HDU 4536 XCOM Enemy Unknown
题目链接:XCOM Enemy Unknown解题思路:普通深搜,无脑搜就行了,注意状态还原。 #include#includestruct A{ int fair, comp;};typedef struct A node; int at[110][3], max, n, m, k;node map[20];int judge(){ int i原创 2014-12-19 15:26:59 · 351 阅读 · 0 评论 -
HDU 4277 USACO ORZ
题目链接:USACO ORZ解题思路:这个题目就是有15根棍子,可以随便拼接,但是不可以破坏棍子的完整性。能组成多少不同的三角形。刚开始直接DFS,TLE了,但是计算了总的状态数量感觉不是很大,为什么就TLE了,感觉是应为递归的话比较费时间,递归深度又比较大,以上全是猜测。后来讨论版有人说第一根棍子其实放在那一个边都无所谓,所以我们直接把第一根棍子放在第一个边,这样不影响最后的答案,又发现原创 2014-12-19 16:01:05 · 452 阅读 · 0 评论 -
POJ 3009 Curling 2.0
题目链接:Curling 2.0解题思路:扔冰壶,刚开始要是被直接锁住的话就不能扔了(一开始没注意,一直错。。。),还有最多扔十次,可以扔到之前扔过的点,所以不用记录之前的状态信息。(代码写的有点笨了)#include#include#define SIZE 25 const int dir[4][2] = {0,1,0,-1,1,0,-1,0};int map[SIZ原创 2013-08-02 15:02:08 · 497 阅读 · 0 评论 -
POJ 3083 Children of the Candy Corn
题目链接:Children of the Candy Corn解题思路:这道是DFS BFS的混合题目,记录好当前的位置信息,在根据左优先(左前右后)右优先(右前左后)的方式走完整个迷宫。最后的最短路径就用BFS解决就好了。#include#include#include#define MAX 45using namespace std;struct A{原创 2013-08-02 13:04:15 · 476 阅读 · 0 评论 -
POJ 1144 Network(割点数量)
题目连接:Network解题思路:求无向图中割点的数量,直接套用模板,输入的时候注意一下,这里输入的量不定#include#include#define MAX 110int map[MAX][MAX], v[MAX], num[MAX], low[MAX], c[MAX], n, ans; void cut(int cur, int father, int de原创 2013-07-18 17:02:43 · 485 阅读 · 0 评论 -
HDU 2181 哈密顿绕行世界问题
题目连接:哈密顿绕行世界问题解题思路:非常裸的深搜,记录好访问过的点就可以了。#include#includeint map[25][3], v[25], ans[25], m, tot;void print(){ int i; printf("%d: ", tot++); for(i = 0; i < 21; i++){ printf(" %d",原创 2013-07-17 19:59:37 · 571 阅读 · 0 评论 -
HDU 1241 Oil Deposits
题目连接:Oil Deposits解题思路:求连通子图数量,每一次搜索一个子图,将其记录下来。#include#include#define MAX 110int v[MAX][MAX], m, n, ans;int dir[8][2] = {-1, -1, -1, 0, -1, 1, 0, -1, 0, 1, 1, -1, 1, 0, 1, 1};char map原创 2013-07-17 19:15:33 · 560 阅读 · 0 评论 -
HDU 4536 XCOM Enemy Unknown
题目链接:XCOM Enemy Unknown解题思路:这是腾讯马拉松复赛第二场的题目,数据量不大,可以直接暴力搜索,回溯的时候记得还原条件。#include#includestruct A{ int fair, comp;};typedef struct A node; int at[110][3], max, n, m, k;node map[20];原创 2013-07-18 08:12:00 · 540 阅读 · 0 评论 -
HDU 1518 Square
题目链接:Square解题思路:这个题按照一个一个边来找,找到3个就可以了,排序之后只要最大的变边长大于 sum / 4就无法构成正方形,每次找到一根木棍时,要找他的下一根木棍,避免多次重复寻找,刚开始一直TLE,最后看了个别人的博客才发现可以这样剪枝。(DFS的搜索状态量要作为函数参数) 所以发现DFS的题目时要先分析哪些变量跟着搜索深度在变化,之后根据判定条件和题设要求具体求解。#i原创 2013-07-14 16:56:28 · 497 阅读 · 0 评论 -
HDU 1016 Prime Ring Problem
题目链接:Prime Ring Problem解题思路:这道题目刚看见的时候感觉DFS肯定会超时,但是数据很水,最后还是AC了。 DFS一般都是递归实现,根据状态的不同,某些变量的数值也不同,应把他们放在函数参数中去,函数中 主要写 1.什么时候退出 2.搜索到这一状态的答案,再搜索下一状态 3.当搜索到全部答案时退出原创 2013-07-14 14:04:20 · 516 阅读 · 0 评论 -
HDU 1312 Red and Black
题目连接: Red and Black解题思路:记录好访问过点的状态,再去访问其他的点,记录图的时候要注意换行符。 #include#include#define MAX 25int dir[4][2] = {1, 0, -1, 0, 0, 1, 0, -1};int v[MAX][MAX], tot, w, h;char map[MAX][MAX];v原创 2013-07-14 11:17:35 · 565 阅读 · 0 评论 -
HDU 1428 漫步校园
题目链接:漫步校园解题思路:语死早,题意说是从左上角到右下角,求不同路径数,他给走过的路径有个限制条件,从A->B的话必须存在一条从B到右下角的路比所有的从A到右下角的路都短。也就是B->右下角的最短路比A->右下角的最短路短。然后就是先BFS,处理出所有点到右下的最短路,然后再进行DFS计数。要用记忆化搜索。其实就是个DP#include#include#include#d原创 2014-12-19 15:23:06 · 443 阅读 · 0 评论