图、dfs、bfs
graph
dfs
bfs
1.clone graph
2.copy list with random pointer
3.topological sorting
4.permutations
5.subsets
6.n queens
7.subsetsII
8.palindrome partitioning
9.combination sum
10.combination sumII
11.word ladder
12.word ladderII
克隆图:先克隆点,再克隆边。
宽度优先搜索有模板,以后告诉了图中的一个点,遍历整张图先想到宽度优先搜索
宽度优先搜索一般有个队列
哈希表
一张图一般不会给你整张图,一般给你的是图中的某一个节点
拓扑排序: 度、入度、出度
每次遍历入度为0的点。去掉入度为0点的边,再遍历剩下的图的入度为0的点
本质上还是一个遍历图的问题
用宽度优先搜索,用dfs时间复杂度大
如果多个点入度为0,随便从哪个点开始排都可以,所以可能同一个图出现多个拓扑排序的结果
图的题主要掌握宽度优先搜索
图和树的宽度优先搜索的对比:都使用队列
树是循环左子树和右子树,图是循环整个相邻的点
有些图的遍历用hash表示这个节点有没有被遍历过
permutations:搜索问题的模板问题
找所有情况的问题想到用dfs,一般只有dfs才能搜索完所有的情况
dfs搜索树
所有的叶子节点相当于permutations问题的可行解
按照搜索树的思想去实现,每个叶子节点其实就是permutations问题的答案
写代码的时候,按照搜索树的思想去模拟搜索的过程就可以
需要回溯到本层,所以需要删除
递归的方法
permutations求所有的排列情况,subsets求所有的子集
subsets:求子集问题也是另一类模板题
去返回所有解,所有可行性的时候,考虑dfs
想到dfs,就需要构建深度优先搜索树
子集不分顺序
之前选择的元素,下一次就不再选择
这个深度优先搜索树,每个节点都是解
每次遍历是从position向后遍历
permutations:
时间复杂度:O(n!)
subsets:
时间复杂度: O(2的n次方)
n queens:一碰到求所有可行性的题,就想到用dfs的方式
转换为permutations问题,不一样的地方在于:每次按照permutations问题放置皇后之后,再写一个check函数,检查在列和对角线上是否有冲突
permutations变形上加了check函数
时间复杂度:O(n!)
subsetsII:需要排序。想把相同的元素排在一起,这样就可以考虑重复的情况。
palindrome partitioning:
与subsets类似,因为subsets也是针对每个值选与不选
时间复杂度:O(2的n-1次方),实际就是 O(2的n次方)
combination sum、combination sumII:求所有满足条件的子集
word ladder:简单图最短路的问题
不可以使用dfs
先用bfs求每个节点到起始节点的距离,然后使用dfs求出所有可行路径
图、dfs、bfs的更多相关文章
- 算法学习记录-图(DFS BFS)
图: 目录: 1.概念 2.邻接矩阵(结构,深度/广度优先遍历) 3.邻接表(结构,深度/广度优先遍历) 图的基本概念: 数据元素:顶点 1.有穷非空(必须有顶点) 2.顶点之间为边(可空) 无向图: ...
- 【数据结构与算法】自己动手实现图的BFS和DFS(附完整源码)
转载请注明出处:http://blog.csdn.net/ns_code/article/details/19617187 图的存储结构 本文的重点在于图的深度优先搜索(DFS)和广度优先搜索(BFS ...
- POJ2308连连看dfs+bfs+优化
DFS+BFS+MAP+剪枝 题意: 就是给你一个10*10的连连看状态,然后问你最后能不能全部消没? 思路: 首先要明确这是一个搜索题目,还有就是关键的一点就是连连看这个游戏是 ...
- CF467D Fedor and Essay 建图DFS
Codeforces Round #267 (Div. 2) CF#267D D - Fedor and Essay D. Fedor and Essay time limit per test ...
- DFS/BFS+思维 HDOJ 5325 Crazy Bobo
题目传送门 /* 题意:给一个树,节点上有权值,问最多能找出多少个点满足在树上是连通的并且按照权值排序后相邻的点 在树上的路径权值都小于这两个点 DFS/BFS+思维:按照权值的大小,从小的到大的连有 ...
- 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)
[题目链接:NYOJ-58] 经典的搜索问题,想必这题用广搜的会比较多,所以我首先使的也是广搜,但其实深搜同样也是可以的. 不考虑剪枝的话,两种方法实践消耗相同,但是深搜相比广搜内存低一点. 我想,因 ...
- ID(dfs+bfs)-hdu-4127-Flood-it!
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4127 题目意思: 给n*n的方格,每个格子有一种颜色(0~5),每次可以选择一种颜色,使得和左上角相 ...
- [LeetCode] 130. Surrounded Regions_Medium tag: DFS/BFS
Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by 'X'. A reg ...
- ACM:图的BFS,走迷宫
题目: 一个网格迷宫由n行m列的单元格组成,每一个单元格要么是空地(用1表示),要么是障碍物(用0来表示).你的任务是找一条从起点到终点的最短移动序列,当中UDLR分别表示往上.下.左.右移动到相邻单 ...
- HDU 4771 (DFS+BFS)
Problem Description Harry Potter has some precious. For example, his invisible robe, his wand and hi ...
随机推荐
- ILSpy
今日为找泛型序列的一个Select方法源码,就去找了个ILSpy反编译工具. 工具下载地址:http://www.fishlee.net/service/softarchive/57,一般选择较新的. ...
- HTML--Canvas基础入门
一 HTML5画布基本介绍 1.HTML5专门为画布功能提供的标签:<canvas>,所以画布相关的功能都是基于这个标签来完成的; <canvas id="canvas&q ...
- node通过QQ邮箱发送邮件
在nodejs里面使用插件,不多说,首先下载: npm install emailjs 下载好之后,先别急着写代码,应该先设置一下,我这里用QQ邮箱举例子. 首先登陆QQ邮箱,然后点击:设置-> ...
- PL/SQL Developer使用小技巧
1.PL/SQL Developer记住登陆密码 在使用PL/SQL Developer时,为了工作方便希望PL/SQL Developer记住登录Oracle的用户名和密码: ...
- Linux常用系统命令
致歉:各位看到此博客的朋友们 因为命令的数量挺多的很多命令也都很简单 我就总结了一下具体的命令和这个命令是做什么的,主要的使用方法是链接到http://man.linuxde.net/的网站的,请各 ...
- Android Color颜色代码
常用颜色代码 <?xml version="1.0" encoding="utf-8"?> <resources> <color ...
- Android--px(像素)和dp、sp之间的相互转化
public class DensityUtil { public DensityUtil() { } public static int dip2px(Context var0, float var ...
- MagicApp说明
title: MagicApp说明 date: 2017-12-06 05:41:00 tags: IT 技术 MagicApp是日常处理的程序,协助进行日常工作处理 批量重命名模块 说明 该模块是根 ...
- 解决Firefox下,页面元素不刷新问题
由于FireFox的刷新机制与IE有较大区别.所以javascript代码 document.location.reload();通常在IE上工作正常,在Firefox下效果却并不理想,这是因为Fir ...
- JavaScript变量提升的理解
变量提升 先说三句总结性的话: let 的「创建」过程被提升了,但是初始化没有提升. var 的「创建」和「初始化」都被提升了. function 的「创建」「初始化」和「赋值」都被提升了. 所以,我 ...