DFS
深度优先搜索
SYaoJun
这个作者很懒,什么都没留下…
展开
-
2443 分成两组【51nod】
题目链接类似的题目正整数分组解题思路直接搜索:选与不选时间复杂度O(2n)O(2^n)O(2n)由于n=20n=20n=20所以时间在10610^6106左右#include <iostream>#include <algorithm> #include <cstring> using namespace std;const int N = 22;int a[N];typedef long long LL;LL n, sum = 0, a原创 2021-06-08 21:10:37 · 341 阅读 · 0 评论 -
拼凑面额
牛客网题目公司:美团类型:搜索 记忆化递归难度:中等题意:从6个固定面值中找出凑成给定面值大小的种数,每个面值可以用无数次。可以用深度搜索,选0到n次,然后回溯。可以使用数组/map保存计算过的值,结果可能超过int所以用long long保存。版本1使用数组保存,执行时间31ms#include <iostream>#include <cmath>#in...原创 2020-04-28 08:53:53 · 174 阅读 · 0 评论 -
329. 矩阵中的最长递增路径
题目类型:深搜 记忆化递归难度:困难题意:从一个二维矩阵中找到一个严格递增的路径。使用深度搜索,不需要标记,因为到当前点是需要满足比原来点数值大的,所以也不会重复遍历。然后使用记忆化递归记录最长的路径,如果已经计算过了直接返回。备注:2020.4.18字节跳动三面面试题。面试官提示我使用回溯,其实没必要,因为递增这个条件限制了不可能会重复使用某个点。class Solution {pu...原创 2020-04-18 22:37:09 · 196 阅读 · 0 评论 -
2020.4.15华为实习招聘笔试题第三题
很可惜,当时没做出来,写了个bug调了一个多小时,但是思路是对的。leetcode刷久了,对各种输入的处理能力不够,第一题本来很简单,也是写了一个bug把心态搞炸了。后续几乎没什么面试机会了。4月末求上天赐我一个offer吧。我真的熬不住了。题也刷了,面经也背了,卵用没有一个,offer至今为0。第三题思路使用map映射 使用拓扑排序判环#include <bits/stdc++....原创 2020-04-16 09:46:44 · 1292 阅读 · 2 评论 -
124. 二叉树中的最大路径和
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */clas...原创 2019-08-30 07:23:38 · 150 阅读 · 0 评论 -
113. 路径总和 II
题目:113. Path Sum II难度:中等类型:树 深搜星级:五星推荐版本12020.3.20精简版class Solution {public: vector<vector<int>> res; vector<int> temp; vector<vector<int>> pathSum(Tre...原创 2020-03-30 15:24:33 · 114 阅读 · 0 评论 -
93. 复原IP地址
题目:93. Restore IP Addresses难度:中等类型:深搜 字符串星级:五星推荐题意:把一个字符串恢复成所有可能的IP地址,注意0不能作为每段的开头。class Solution {public: vector<string> res; vector<int> temp; int n; vector<stri...原创 2020-03-29 22:19:42 · 148 阅读 · 0 评论 -
1154 Vertex Coloring (25 分)
遍历所有边,不需要用深搜,只需要把读入的每条边再循环一遍就ok了#include<bits/stdc++.h>using namespace std;const int maxn=1e4+5;int arr[maxn];struct node{ int u,v;}E[maxn];set<int> st;int main(){ int n,m,u,v;...原创 2019-07-25 09:46:57 · 210 阅读 · 0 评论 -
7-21 Counting Leaves (30 分)
树+DFS目标:统计每层的叶子节点个数主要是存储树的父子关系,然后统计。#include <cstdio>#include <iostream>#include <algorithm>#include <vector>#include <string.h>using namespace std;const int N =...原创 2019-11-24 22:59:37 · 289 阅读 · 0 评论 -
1097. 池塘计数
AcWing题目链接Flood Fill经典题数据较小使用dfs,数据较大使用bfs#include <iostream>#include <cstring>#include <cstdio>#include <queue>using namespace std;const int N = 1005;char g[N][N];in...原创 2019-10-31 09:52:38 · 265 阅读 · 0 评论 -
860. 染色法判定二分图
AcWing题目链接染色法用染色法判断二分图如果一个图是二分图,当且仅当图中不含奇数环对每个节点进行交错染色,如果染色没有出现矛盾则是二分图。#include <iostream>#include <cstring>#include <algorithm>#include <queue>using namespace std;co...原创 2019-10-29 21:27:19 · 134 阅读 · 0 评论 -
846. 树的重心
注意ne数组和e数组的大小是顶点数的两倍每个顶点遍历一遍,搜索中计算和返回。#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 1e5+5, M = N*2;bool st[N]={false}; int h[N],...原创 2019-10-29 20:09:09 · 147 阅读 · 0 评论 -
843. n-皇后问题
AcWing题目链接DFS#include <iostream>#include <cstdio>#include <cmath>using namespace std;const int N = 20;int n;int pos[N];void dfs(int u){ if(u == n){ //8个皇后都放好了 放在前u行 for(...原创 2019-10-27 17:09:33 · 150 阅读 · 0 评论 -
八皇后问题
牛客网题目链接DFS#include <iostream>#include <cstdio>#include <cmath>using namespace std;int num = 0;int ans[92][8];//存八皇后的所有串 int pos[8];//存第i行的皇后存在哪一列 void dfs(int u){ if(u == 8...原创 2019-10-27 16:23:27 · 159 阅读 · 0 评论 -
最长句子
牛客网题目链接DAG最长路需要用到动态规划,注意容器清空。#include <iostream>#include <cstdio>#include <algorithm>#include <queue>#include <vector>#include <cstring>#include <unorde...原创 2019-10-24 20:24:40 · 164 阅读 · 0 评论 -
7-33 地下迷宫探索 (30 分)
DFS + 回溯#include <iostream>#include <vector>#include <string>#include <cmath>#include <algorithm>#include <queue>#include <cstdio>#include <cctype&...原创 2019-10-12 16:14:41 · 221 阅读 · 0 评论 -
17. 电话号码的字母组合
class Solution {public: string chars[8]={"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; vector<string> letterCombinations(string digits) { if(digits.empty()) return vector&...原创 2019-09-02 07:09:35 · 566 阅读 · 0 评论 -
695. Max Area of Island
深搜1的位置,记录每个面积的大小,及时更新。class Solution {public: int n, m; int dx[4]={1,-1,0,0}, dy[4]={0,0,1,-1}; int maxAreaOfIsland(vector<vector<int>>& grid) { n = grid.size(), ...原创 2019-09-06 08:31:32 · 218 阅读 · 0 评论 -
130. 被围绕的区域
先把边缘的O使用深搜编程另一个字符,然后把被X包围的O编程Xclass Solution {public: int n, m; void solve(vector<vector<char>>& board) { if(board.empty() || board[0].empty()) return; n = bo...原创 2019-09-06 08:12:55 · 152 阅读 · 0 评论 -
104. Maximum Depth of Binary Tree
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */clas...原创 2019-09-05 19:50:34 · 90 阅读 · 0 评论 -
863. All Nodes Distance K in Binary Tree
//建立无向图,用深搜把所有长度为k的节点找到。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), righ...原创 2019-09-05 07:46:10 · 71 阅读 · 0 评论 -
51nod 2067 n 皇后问题
题目链接#include <iostream>#include <vector>#include <cstring>using namespace std;int n, res = 0;int pos[11];void dfs(int k){ //前0~k-1个皇后已经摆好了,现在摆第k个 if(k == n){ res++; re...原创 2019-09-02 09:21:20 · 394 阅读 · 1 评论 -
AcWing 842. 排列数字(DFS模板题)
#include <iostream>#include <vector>#include <cstring>using namespace std;vector<int> res, nums;bool vis[10];void dfs(int k, int u) { if (u == nums.size()) { res.push_...原创 2019-09-02 08:18:15 · 211 阅读 · 0 评论 -
L2-013 红色警报 (25 分)
考查图的连通分量先计算最开始的连通分量,然后把输入的这个点标记为访问的点,再统计一遍连通分量只有当连通分量增加了,说明删除的点才是关键点。每次将前面输入过的点记为标记过的点注意失去最后一个城市要根据数量判断,而不能直接放在程序的末尾,不然有个测试点会过不去#include <iostream>#include <algorithm>#include <st...原创 2019-09-07 08:13:13 · 271 阅读 · 0 评论 -
全排列算法
123132213231321312不断的把数组中的首位分割开,最终实现全排列这里传的是数组,但是操作是在同一个数组操作的,意思就是交换操作是全局的,同时把这个改变过后的结果传个了下一次迭代,但是输出完元素后,程序又进行了一次交换,即自动恢复了对数组的交换,所以我们可以检验最后数组的输出情况,不出意外应该是和原数组一样的结果 。注意:此处没有保证从小到大的全排列,因为按照这种规则...原创 2018-12-22 14:58:52 · 212 阅读 · 0 评论 -
78. Subsets
深搜DFSclass Solution {public: vector<vector<int>> res; vector<int> path; int n; vector<vector<int>> subsets(vector<int>& nums) { n = nu...原创 2019-08-23 07:48:29 · 87 阅读 · 0 评论 -
90. 子集 II
最容易想到的办法是先将全部集合搜索出来,然后用set判重。不重复DFSclass Solution {public: vector<vector<int>> res; vector<int> path; int n; vector<vector<int>> subsetsWithDup(vector...原创 2019-08-23 08:29:27 · 89 阅读 · 0 评论 -
39. Combination Sum
有一点像完全背包问题结果是深搜带有while循环的深搜注意回溯的时候也要使用whileclass Solution {public: vector<vector<int>> res; vector<int> path; vector<vector<int>> combinationSum(vector&l...原创 2019-09-14 10:43:08 · 83 阅读 · 0 评论 -
22. 括号生成
又是跟着y总抄了一遍class Solution {public: int n; vector<string> res; vector<string> generateParenthesis(int _n) { n = _n; dfs("", 0, 0); return res; } ...原创 2019-09-14 11:25:49 · 70 阅读 · 0 评论 -
40. Combination Sum II
这种方法不太好虽然强行通过了但是是用set去重的应该在深搜里体现在对class Solution {public: set<vector<int>> res; vector<int> path; void dfs(vector<int>& c, int u, int t){ if(!t){ ...原创 2019-09-15 20:01:09 · 90 阅读 · 0 评论 -
L3-001 凑零钱 (30 分)
题目链接DFS+剪枝这种选和不选的题最好用递归做了,但是需要剪枝,然后就是对特殊情况的考虑,不然会超时。注意当数组中所有数的和加起来都达不到目标值,就没必要搜索了,直接输出无解#include<bits/stdc++.h>using namespace std;const int maxn = 1e4+5;const int maxx = 1e6+5;int arr[...原创 2019-08-09 20:44:25 · 503 阅读 · 0 评论 -
7-1 Forever (20 分)
考查的知识点:1.暴力会超时,需要剪枝2.输出不唯一时,先按照n排序,再按照A排序3.没有的时候输出No Solution#include <iostream>#include <cstdio>#include <stack>#include <algorithm> #include <vector>#include &...原创 2019-09-27 09:21:50 · 294 阅读 · 0 评论 -
L2-023 图着色问题 (25 分)
L2-023 图着色问题 (25 分)注意:顶点的编号是从1开始的 ,同时要判断给定的给出的颜色数是否等于k#include<bits/stdc++.h>#include<iostream>using namespace std;int v,e,k,x,y,n;vector<int> G[505];int arr[505];set<int&...原创 2019-05-03 12:20:54 · 454 阅读 · 0 评论 -
79. Word Search
注意传引用class Solution {public: int dx[4] = {1, -1, 0, 0}, dy[4] = {0, 0, 1, -1}; int n, m; bool exist(vector<vector<char>>& board, string word) { if(board.empty() |...原创 2019-09-02 07:09:02 · 79 阅读 · 0 评论 -
46. Permutations
直接调用C++中的库函数注意需要对数组中的值先排序,因为这个函数是按照当前排列的下一个排列进行变换的。version 1class Solution {public: vector<vector<int>> permute(vector<int>& nums) { vector<vector<int>&g...原创 2019-09-02 07:08:29 · 69 阅读 · 0 评论 -
47. 全排列 II
不同的题但是可以用同一个代码解可能这就是标准库函数的魅力吧version 1class Solution {public: vector<vector<int>> permuteUnique(vector<int>& nums) { vector<vector<int>> res; ...原创 2019-09-01 09:46:26 · 93 阅读 · 0 评论 -
L2-020 功夫传人 (25 分)
题目链接深搜DFS边搜索边记录#include<bits/stdc++.h>using namespace std;const int maxn = 1e5+5;vector<int> v[maxn];int dd[maxn]={0};double ddz=0;void dfs(int r,double cur, double c){ if(dd[r...原创 2019-07-20 08:53:21 · 499 阅读 · 0 评论 -
L2-026 小字辈 (25 分)
题目链接这道题深搜广搜都可以,但是我最开始写的搜索只得了一分,可怜。深搜DFS #include<bits/stdc++.h> using namespace std; const int maxn=1e5+5; vector<int> v[maxn],ans; int opt=-1; void dfs(int x, int now){ if(now &...原创 2019-07-20 07:49:34 · 673 阅读 · 0 评论 -
全排列【北京大学】
题目描述给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有’a’ < ‘b’ < … < ‘y’ < ‘z’,而且给定的字符串中的字母已经按照从小到大的顺序排列。输入描述:输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。输出描述:输出这个字符串的所有排列方式,每行一个排列。要求字母序...原创 2019-07-29 10:28:24 · 189 阅读 · 0 评论 -
填涂颜色
填涂颜色解题思路大佬用的技巧是在矩阵的外围加了一圈,所以从左上角开始搜索时,始终能保持连通。这个很关键,也是精髓所在,比其他大佬用BFS写得代码更通俗易懂。#include<cstdio>#include<iostream>using namespace std;int A[33][33];//四个方向 int dx[4] = {1,-1,0,0};in...原创 2019-07-15 10:28:28 · 496 阅读 · 0 评论