随笔分类 -  DFS

摘要:"46. Permutations" "47. Permutations II" 和 "Combination Sum II" 是类似的,只用递归重复数字的第一个数字,后面都是重复的解。 阅读全文
posted @ 2019-03-10 18:58 ACLJW 阅读(180) 评论(0) 推荐(0)
摘要:"39. Combination Sum" 这道题就是简单的回溯,需要注意的是为了避免重复结果以及降低时间复杂度,可以先对cans数组进行排序,然后每次回溯的时候从chs数组的最后一个元素在cans数组中的位置开始进行,这样就保证了解序列是升序,从而避免了重复回溯,因此也减少了时间。 阅读全文
posted @ 2019-03-08 10:44 ACLJW 阅读(234) 评论(0) 推荐(0)
摘要:Overlapping Squares我的思路:可以根据所给图形计算出图形中包含的方块的个数以及它们各自的位置,方块可以根据某一个角点的位置来确定,具体方法见 count() 函数。方块确定之后,图形的各种变化就取决于方块们的不同放置顺序了,枚举所有排列,进行模拟,看... 阅读全文
posted @ 2018-12-29 15:49 ACLJW 阅读(211) 评论(0) 推荐(0)
摘要:The Domino Effect回溯加剪枝。只需DFS右、下两个方向即可,可以一行一行来。弄完一行之后看下该行所有数字是否都配对了,否则剪枝。还是得细心,两个 cnt 认错了找了大半天 bug 。。。#includeusing namespace std;const... 阅读全文
posted @ 2018-12-16 23:42 ACLJW 阅读(133) 评论(0) 推荐(0)
摘要:Golygons回溯加剪枝。某个方向可走的条件是此方向上没有障碍物挡道,还有一点容易被忽视的就是不能落到之前到过的点上!!!最重要的剪枝就是每走一步就判断一下剩下的步数是否有可能回到原点,还有就是如果提前到达原点也要剪掉。#includeusing namespace... 阅读全文
posted @ 2018-12-13 23:34 ACLJW 阅读(205) 评论(0) 推荐(0)
摘要:Firetruck回溯即可,不过要注意先判断是否可以到达着火点,如果到不了那就没必要回溯了,可能给的数据比较坑,到不了的数据比较多,不判断的话会超时。还有就是输出的格式和样例给的竟然不一样,真是醉了。#includeusing namespace std;const ... 阅读全文
posted @ 2018-12-11 17:09 ACLJW 阅读(122) 评论(0) 推荐(0)
摘要:Mobile Computing枚举二叉树然后计算其宽度即可,每次枚举两个节点构造一个父节点,计算宽度时需要注意的是每棵树的左节点的右边缘可能超过其右子树的左边缘,反之亦然。#includeusing namespace std;const int maxn = 12... 阅读全文
posted @ 2018-10-26 17:37 ACLJW 阅读(162) 评论(0) 推荐(0)
摘要:Paintball这个题可以看作是图上有很多圆形禁区,如果直接考虑是否可以从左边走到右边似乎有些无从下手,其实可以这样考虑,把整个方形区域看作水面,把禁区看作小岛,如果可以从上边沿着这些小岛走到下边的话,就说明方形区域被禁区整个隔断了,那么就不能从左边走到右边,这样一... 阅读全文
posted @ 2018-08-29 00:32 ACLJW 阅读(218) 评论(0) 推荐(0)
摘要:Krypton Factor注意 && 别写成 & 了。。。#includeusing namespace std;const int maxn = 80 + 5;int n,L,cnt;int A[maxn];int dfs(int cur){ if(cnt+... 阅读全文
posted @ 2018-08-17 00:39 ACLJW 阅读(113) 评论(0) 推荐(0)
摘要:Prime Ring Problem#includeusing namespace std;const int maxn = 17;int n;int A[maxn],vis[maxn],p[2*maxn];int isPrime(int n){ for(int... 阅读全文
posted @ 2018-08-16 00:13 ACLJW 阅读(97) 评论(0) 推荐(0)
摘要:Sculpture思路:将三维空间网格化,每个长方体占据的所有单元标记为1。求面积的话,DFS所有的单元,依次检查是上下左右前后六个方向上相邻单元是否为1,若否则是表面,面积加+1。求体积的话,从外面某个单元开始DFS,求出外面值为0的单元的个数,那么总单元个数 - ... 阅读全文
posted @ 2018-08-07 23:55 ACLJW 阅读(212) 评论(0) 推荐(0)
摘要:Undraw the Trees这题没啥说的,利用DFS进行先序遍历即可,注意 node 可以不是字母,然后 puts() 默认换行的,太久没用都忘了。。#includeusing namespace std;const int maxn = 200 + 5;int ... 阅读全文
posted @ 2018-08-06 23:37 ACLJW 阅读(133) 评论(0) 推荐(0)
摘要:Ordering Tasks这题比较简单,就是拓扑排序,而且肯定是有向无环图,直接DFS即可。注意数据读取,只要 n 和 m 有一个不为0即可。。。不考虑是否存在环:#includeusing namespace std;const int maxn = 100 + ... 阅读全文
posted @ 2018-08-05 00:29 ACLJW 阅读(113) 评论(0) 推荐(0)
摘要:Ancient Messages数一数就能发现,题目表中的6个符号从左到右依次有1,3,5,4,0,2个洞,各不相同。这样,只需要数一数输入的符号有几个“白洞”,就能准确地知道它是哪个符号了。至于具体实现,我的思路是:先确定一个符号,找到该符号的空洞个数然后将该符号“... 阅读全文
posted @ 2018-06-02 23:53 ACLJW 阅读(182) 评论(0) 推荐(0)
摘要:Oil Deposits#includeusing namespace std;const int maxn = 100 + 5;int m,n,cnt;char graph[maxn][maxn];void dfs(int x,int y){ graph[x]... 阅读全文
posted @ 2018-06-01 12:59 ACLJW 阅读(119) 评论(0) 推荐(0)
摘要:Quadtrees建树递归,合并也递归。在合并的时候要注意只有两个没有子节点的节点之间才可以合并,可能会遇到三种情况:1. 两个都是最小单元(相对本身),直接合并;2. 其中一个有子节点,依次其将其子节点与另一个节点合并;3. 两个都有子节点,依次将其子节点按顺序进行... 阅读全文
posted @ 2018-05-31 23:22 ACLJW 阅读(103) 评论(0) 推荐(0)
摘要:总时间限制: 1000ms内存限制: 65536kB描述Due to recent rains, water has pooled in various places in Farmer John's field, which is represented by a ... 阅读全文
posted @ 2018-03-15 00:46 ACLJW 阅读(223) 评论(0) 推荐(0)
摘要:部分和问题时间限制:1000 ms | 内存限制:65535 KB难度:2描述给定整数a1、a2、.......an,判断是否可以从中选出若干数,使它们的和恰好为K。输入首先,n和k,n表示数的个数,k表示数的和。接着一行n个数。(1using namespace... 阅读全文
posted @ 2018-03-14 23:18 ACLJW 阅读(141) 评论(0) 推荐(0)
摘要:06-图2 Saving James Bond - Easy Version(25 分) This time let us consider the situation in the movie “Live and Let Die” in which Jam... 阅读全文
posted @ 2017-12-15 22:11 ACLJW 阅读(126) 评论(0) 推荐(0)