![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DFS例题
只会写臭虫
这个作者很懒,什么都没留下…
展开
-
洛谷P1092 虫食算(DFS+减枝)
首先,我们只考虑加法的虫食算。这里的加法是N进制加法,算式中三个数都有N位,允许有前导的0。其次,虫子把所有的数都啃光了,我们只知道哪些数字是相同的,我们将相同的数字用相同的字母表示,不同的数字用不同的字母表示。如果这个算式是N进制的,我们就取英文字母表午的前N个大写字母来表示这个算式中的0到N−1这N个不同的数字:但是这N个字母并不一定顺序地代表0到N−1N−1。输入数据保证N个字母分别至少出...原创 2019-05-26 23:14:43 · 338 阅读 · 0 评论 -
POJ1753 Flip Game(状态压缩+BFS或DFS)
题意:给你一个4*4的棋盘,每个棋子非黑即白,翻一个棋子会带动它上下左右的棋子也翻过来,问至少多少次可以使棋盘全黑或者全白。分析:因为是至少翻多少次,我们就可以联想到利用BFS来做,因为棋盘只有16位,我们就以一个16位二进制数来存储当前棋盘的状态。当前棋盘的状态就类似普通bfs中的某个节点。从当前节点扩展到下一节点的方法就是以16个格子为中心进行翻转。代码:#include <st...原创 2019-06-30 13:36:33 · 157 阅读 · 0 评论 -
2018南京大学计算机夏令营机试第二题(回溯)
Missing numberGiven a positive integer n(n≤40), pick n-1 numbers randomly from 1 to n and concatenate them in random order as a string s, which means there is a missing number between 1 and n. Can ...原创 2019-07-05 00:14:29 · 1059 阅读 · 0 评论 -
LeetCode 322. 零钱兑换(完全背包问题(DP)或DFS)
dp解法:class Solution {public: int dp[1000000]; int coinChange(vector<int>& coins, int amount) { for(int i=1;i<=amount;i++){ dp[i]=2000000000; for...原创 2019-06-28 21:36:19 · 389 阅读 · 0 评论 -
洛谷P1363 幻象迷宫(DFS)
输入样例#1:5 4##.###S##…##.###…#5 4##.###S##…#…#.#.##输出样例#1:YesNo大概就是说给出一个01迷宫类的地图,按照这个地图来扩展新地图,类似这样,然后问你是不是###可以走无限远。搜索结束的条件为重复到达地图的某个点且实际横纵坐标与上一次访问时的不同即可。注意也要判断在同一个小地图里,某个点是否被重复访问,不然会死循...原创 2019-06-27 13:58:56 · 289 阅读 · 0 评论 -
LeetCode 39. 组合总和(回溯) +LeetCode 40. 组合总和 II(回溯)+216. 组合总和 III(回溯)+377. 组合总和 Ⅳ(dp)
普通的dfs回溯:class Solution {public: vector< vector<int> > ans; void dfs(vector<int>& candidates,int target,vector<int> tmp,int idx){ if(target<0) ...原创 2019-07-02 17:14:37 · 185 阅读 · 0 评论 -
LeetCode756. 金字塔转换矩阵
思路分析:首先我们需要知道每构造一次,bottom的长度减一,当bottom的长度 == 1时说明构造成功了。而每次构造都是按顺序取出bottom中的两个字母,确定第三个字母(‘A’到‘G’一共7种可能),这时我们再去判断当前三元组是否在规则中,如果在规则中我们就继续构造。当我们把bottom构造得到下一层nextStr,再使用nextStr构造下一层…直到bottom的大小 == 1。总结:这...转载 2019-06-17 15:43:13 · 264 阅读 · 0 评论 -
LeetCode638. 大礼包(DFS)
利用DFS进行枚举,每次dfs时,判断当前needs能否使用某个大礼包来替换,若能,就更新needs数组,进行下一次dfs,直到没有可以替换的大礼包为止。代码是抄的题解的:class Solution {public: bool valid(vector<int> &special_single, vector<int> &needs){ ...原创 2019-06-17 13:55:47 · 325 阅读 · 0 评论 -
LeetCode 473. 火柴拼正方形(DFS)
①将数组升序排序,贪心选择长的构建边,这样每次构建边的时候不用考虑有多种情况。②只需要构建三条边即可,因为之前已经对变长进行了判定。抄的别人的代码:class Solution {public: bool dfs(vector<int> &nums,int curLen) { if(curLen==0) return t...原创 2019-06-17 13:17:46 · 377 阅读 · 0 评论 -
LeetCode851. 喧闹和富有(DFS+记忆化搜索)
这题的意思是从每个节点出发,进行dfs,然后找出连通的结点中quiet值最小的那个点,这题采用记忆化搜索,对于每次dfs,返回当前节点及之后节点中quiet值最小的那个节点的编号。若已经访问过,则直接返回ans中的值。代码:class Solution {public: int g[505][505]; int vis[505]; int dfs(vecto...原创 2019-06-19 19:30:35 · 329 阅读 · 0 评论 -
LeetCode802. 找到最终的安全状态(DFS+记忆化搜索)
本题大意就是找出所有不与环连通的结点。不安全状态有两种情况:1、这个点在一个环中。2、这个点顺着边递推,会走到一个环里。所以本题的思路是给点设置三种状态,初始时的0表示未访问过的点;1表示这个点是不安全的,即这个点连接着一个环或就在环中;2表示这个点是安全的,不与任何环连通。然后对每个点进行深度优先搜索,若遇到了不安全的点,那么这个点也是不安全的,置为2。若遇到了安全的点,则表示已经有了一条可以...转载 2019-06-19 18:33:55 · 256 阅读 · 0 评论 -
洛谷P1434 [SHOI2002]滑雪(dfs+记忆化搜索)
题目描述Michael喜欢滑雪。这并不奇怪,因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道在一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子:1 2 3 4 516 17 18 19 615 24 25 20 714 2...原创 2019-05-28 16:35:41 · 173 阅读 · 0 评论 -
LeetCode 417. 太平洋大西洋水流问题
设置两个数组,记录当前节点是否能够能流向太平洋和大西洋,从边界开始扩展, 能够扩展到的结点表示该节点能够流向太平洋或者大西洋,最后两个数组标志都1的坐标结点即为正确答案。class Solution {public: int tp[155][155]; int dx[155][155]; int dir[4][2]={{1,0},{-1,0},{0,1},{0,...原创 2019-07-07 00:57:56 · 214 阅读 · 0 评论