随笔分类 -  8.1深度优先搜索

摘要:题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805362341822464 大致题意就是求叶子节点的最小点权,并统计其个数。 一刷:1106 Lowest Price in Supply Chain 1 #incl 阅读全文
posted @ 2020-03-25 16:29 tangq123 阅读(125) 评论(0) 推荐(0)
摘要:题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805355987451904 大致题意就是给出一个序列,构造一棵二叉查找树,输出最大深度和次最大深度的结点个数之和。 方法一,BFS 1 #include<iostre 阅读全文
posted @ 2020-03-21 12:57 tangq123 阅读(173) 评论(0) 推荐(0)
摘要:题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805347523346432 本文完全参考刘婼的思路和代码!!! 参考地址:https://www.liuchuo.net/archives/3850 我刚开始想的是用 阅读全文
posted @ 2020-03-18 12:27 tangq123 阅读(239) 评论(0) 推荐(0)
摘要:大致题意就是给出一个无向图(可能包含若干连通块)、各顶点的权值,如果每一条边上两顶点的权值均不相同,那么输出所有不同权值的顶点个数,否则输出No。 由于题目顶点数 最多是10000,所以采用邻接表存储无向图。 然后使用DFS+回溯剪枝,遍历所有连通块的所有边,并对边上两顶点的权值进行判断即可。 1 阅读全文
posted @ 2020-03-12 22:39 tangq123 阅读(190) 评论(0) 推荐(0)
摘要:大致题意就是给出N个结点 和 N-1条边,判断它们能否形成一棵N个结点的树?如果能就从中选出某个结点,使得整棵树的高度最大。输出所有 满足要求的可以作为根结点的结点。 思路: 第一步,由于连通且边数为 N-1 的图一定是一棵树。所以可以通过并查集判断图是否连通。 第二步,当图连通时,遍历每个顶点,并 阅读全文
posted @ 2020-03-07 09:21 tangq123 阅读(195) 评论(0) 推荐(0)
摘要:大致题意就是给出一个无向图(可能包含若干连通块),删除某个顶点和与其相连的边以后,最少需要添加多少条边,使其成为一个连通图(一个图只包含一个连通块)。 思路: 第一步,删除某个顶点V,直接置visited[V]为已被访问即可。 第二步,删除顶点后,遍历图中所有连通块,并统计个数。 第三步,添加的边数 阅读全文
posted @ 2020-03-06 20:08 tangq123 阅读(217) 评论(0) 推荐(0)
摘要:大致题意就是给出N组数据构造一个无向连通图,然后从顶点U开始统计出 L层 内(除自己外)所有结点的个数。 若使用DFS很容易出问题,比如: 情况一,图中有环。如果整个环上的结点都被访问并标记了,那么与环相连的其它路径上的结点可能无法因为路径上的某个结点被标记了,导致其无法被访问到。 情况二,可能会重 阅读全文
posted @ 2020-03-06 17:36 tangq123 阅读(148) 评论(0) 推荐(0)
摘要:大致题意就是给出 N对 人的通话记录,可以根据通话对象分成若干个组(连通图)。在一个连通图中,任意两个人之间的总通话时长表示边权,一个人参与的总通话时长表示点权,所有人的总通话时长表示总边权。现在给定一个阀值K,且只要连通图的总边权超过K,并满足成员数超过2,则该组视为“犯罪团伙”,而且该组内点权最 阅读全文
posted @ 2020-03-06 11:56 tangq123 阅读(180) 评论(0) 推荐(0)
摘要:大致题意就是给出一棵树,求出叶子结点的带权路径长度等于 S的路径(即根结点到叶子结点的路径上的点权权值之和),如果有多条路径序列,那么按反字典序输出它们。 1 #include<iostream> 2 #include<vector> 3 #include<algorithm> 4 using na 阅读全文
posted @ 2020-03-03 10:35 tangq123 阅读(136) 评论(0) 推荐(0)
摘要:大致题意就是给出一棵树,求出每一层叶子节点个数。 1 #include<iostream> 2 #include<vector> 3 #include<algorithm> 4 using namespace std; 5 6 const int maxn = 200; 7 vector<int> 阅读全文
posted @ 2020-03-03 10:01 tangq123 阅读(150) 评论(0) 推荐(0)
摘要:大致题意就是给出一棵树,求出叶子结点的最小权值,并输出该叶子节点的个数。 这是一道模板题,我近期做的几乎都是模板题。我现在认为 树与二叉树 是对 图 的一种严格约束,并且“二叉树,树,图”使用邻接表的存储结构比较多。 1 #include<iostream> 2 #include<vector> 3 阅读全文
posted @ 2020-03-03 09:36 tangq123 阅读(129) 评论(0) 推荐(0)
摘要:大致题意就是给出一棵树,求出哪一层结点的个数最多,输出个数 和第几层。 这题挺简单的,就是写代码的时候比较粗心,导致调试了好久。。。 我用的BFS,总的来说,BFS要比DFS多30行代码,但是BFS更容易理解。 BFS代码: 1 #include<iostream> 2 #include<vecto 阅读全文
posted @ 2020-03-02 19:36 tangq123 阅读(137) 评论(0) 推荐(0)
摘要:写递归最重要的教训,不知道就会导致死循环的。 一般来说,DFS的递归边界即判断条件在第二层递归时才开始起作用,第一层不起作用,第二层的递归边界判断的是第一层数据处理的结果。切记切记!!! 所以在写选择分支时,要处理的是当前参数,而不是下一层递归的参数, 所以在主函数中调用DFS时,填入的参数一般都是 阅读全文
posted @ 2020-03-01 19:13 tangq123 阅读(201) 评论(0) 推荐(0)
摘要:内心OS:这道题是去年准备HD复试时,我用来练习DFS的。现在再做这道题,感触颇深,唉,时光蹉跎,物是人非啊~~ 题目: 你有一张某海域NxN像素的照片,”.”表示海洋、”#”表示陆地,如下所示: ……. .##…. .##…. ….##. ..####. …###. ……. 其中”上下左右”四个方 阅读全文
posted @ 2020-02-28 11:08 tangq123 阅读(204) 评论(0) 推荐(0)
摘要:题目: 给定一个 n x m大小的迷宫,其中 “*” 代表不可通过的墙壁,而 ’.‘代表平地,S表示起点,T表示终点。移动过程中,如果当前位置是(x,y)(下标从0开始),且每次只能往上下左右四个方向的平地移动,求从起点S到达终点T的最少步数。 ..... .*.*. .*S*. .***. ... 阅读全文
posted @ 2020-02-27 19:55 tangq123 阅读(1189) 评论(0) 推荐(0)
摘要:题目: 给出一个 m x n 的矩阵,矩阵中的元素为0或1。如果矩阵中有若干个 1是相邻的,那么称这些1构成了一个“块”。求给定的矩阵中“块”的个数。 0 1 1 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 1 1 1 0 1 0 0 1 1 阅读全文
posted @ 2020-02-27 13:38 tangq123 阅读(557) 评论(0) 推荐(1)
摘要:题目: 给定N 个整数(可能有负数),从中选择 K个数,使得这 K个数之和恰好等于一个给定的整数 X;如果有多种方案,那么选择它们中元素平方和最大的一个。例如,从4个整数{ 2, 3, 3 ,4}中选择 2个数(集合中的每一个数只能被选一次),使它们的和为 6。显然有两种方案{2,4}和{3, 3} 阅读全文
posted @ 2020-02-27 10:25 tangq123 阅读(605) 评论(0) 推荐(0)
摘要:题目: 有n件物品,每件物品的重量为w[i],价值为c[i]。现在需要选出若干件物品放入一个容量为 V 的背包中,使得在选入背包的物品重量之和,不超过容量V的前提下,让北欧保重物品的价值之和最大,求最大价值。(1<=n<=20) 输入格式: 第一行要求给出 N个物品(1<=N<=20),和容量V; 阅读全文
posted @ 2020-02-26 22:03 tangq123 阅读(1136) 评论(0) 推荐(0)