
DFS(深度优先搜索)
文章平均质量分 88
Chen_yuazzy
The best way to predict the future is to create it.
预测未来的最好办法是去创造它。
---Alan Kay
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【HDU 1258】Sum It Up(DFS,去重技巧)
思路:这道题和HDU-1342 Lotto很相似,都在DFS中套用了两层递归。1342那题规定了输出元素个数,只需求出所有排列。因此搜索出口很方便找到。而此题是要求寻找符合“和等于所给值”的所有排列,甚至可能找不到。上代码,大致讲解一下:void DFS(int num,int pos,int sum){ if(sum==N) { judge=true;原创 2017-07-31 01:01:09 · 2055 阅读 · 4 评论 -
【HDU 1035】Robot Motion(DFS)
思路挺水的DFS,不过是第一次思路无阻1A的DFS,还是写博客纪念一下。能够走出迷宫,即没有走到循环死路的时候,步数还是很好统计的。遵循DFS套路,出口越界判断,vis数组标记,递归调用,统计步数。难点就在于走入死循环情况步数的统计。要分别输出进入循环之前的步数和循环中的步数。容易想到,第一次走到循环入口将vis[i][j]标记为1,第二次必经过一个完整循环到达循环入口,第3次同样。故考虑将vis[row原创 2017-07-28 23:18:29 · 3034 阅读 · 0 评论 -
【HDU 1015】Safacraker(DFS)
思路又是一道DFS求满足条件的数据排列问题,不过只需要输出一种特殊情况:满足字典序最大。由此总结出一个规律:若只需求出一个特殊解,增设一个judge判断放在出口条件前,求出这个解则终止函数若要求出所有情况,不需要这个判断,并在每次递归调用满足条件时输出要按字典序最大输出,则需要将输入的数组按降序重新排列。要求大写字母在字典中的序号数(从1开始),则进行ar[i]-‘A’+1即可。最后输出字母的时候进行an原创 2017-07-31 00:14:49 · 1531 阅读 · 1 评论 -
【HDU 1010】Tempter of the Bone(DFS,奇偶剪枝)
题意狗狗要在特定时刻逃出N*M迷宫,迷宫已输入,‘.’表示可以走的路,’#’表示不能走的墙,’S’表示开始位置,‘D’表示结束位置。不能走回头路。思路以及细节点输入时将起点、终点位置记录,并将墙的vis置为true(不能 再 走了)DFS,先贴代码原创 2017-07-30 12:18:28 · 1589 阅读 · 1 评论 -
【HDU 1045】Fire Net(DFS,check函数)
解题思路:既然要求城中可放置的武器最大数量,易想到套用两层for循环遍历每一个点进行DFS求解。关键在于条件的处理。由于每一个安置武器的点都需要检查其所在行、列,故需要for循环遍历。若是墙 则break跳出循环,继续往其他方向遍历,若遇到了炮弹,不能填,返回false。每次求出一个炮弹数量值之后要记得回溯。原创 2017-07-29 12:32:21 · 1883 阅读 · 0 评论 -
【POJ 2676】Sudoku数独(DFS)
思路:DFS遍历解数独,很有意思的题目,由于行、列、每一个3*3小方格都不能重复,故需要三个数组row,col,dig来标记某1~9数字是否出现。DFS遍历,具体思路见注释。原创 2017-07-28 12:20:47 · 1374 阅读 · 1 评论 -
【AOJ 869】迷宫(DFS)
迷宫Description迷宫的管理员们决定在新开始的季节里使用新的墙纸。出于这个目的他们需要一个程序来计算迷宫内墙壁的面积。解题思路:典型的DFS,求墙壁面积即求可见面积的长度,DFS遍历每个点,判断周围每个点有几面墙,注意到出口入口各自少了两面墙。原创 2017-06-23 22:31:00 · 6910 阅读 · 6 评论 -
【HDU 1016】Prime Ring Problem(DFS、素数筛)
思路:要求每两个相邻数之和都为素数,那么只要每次递归调用DFS时判断之前两个数之和是否为素数,另外注意因为是一个环,最后还要判断一下最后一个数和第一个数之和是否为素数。程序开始时求出一个素数数组,只需求出50以内的素数即可,因为数据<20,最大的素数和为17+19=36。此处用的是素数筛法(什么是素数筛法?)求素数。 素数筛法概览:把从1开始的、某一范围内的正整数从小到大顺序排列, 1不是素数,首先把它筛掉原创 2017-07-30 23:39:29 · 2103 阅读 · 0 评论 -
【总结】DFS算法模板及题型分类
题型分类: 写过这些入门题后,我们可以将DFS题分为两大类:地图型和数据型;算法模板:由此可以总结一个DFS的基本套路:判出口(终点、越界)->剪枝->扩展->标记->递归->还原原创 2017-07-31 11:27:37 · 5127 阅读 · 2 评论