
图
文章平均质量分 51
图
happy19991001
笨鸟先飞
展开
-
BFS:克隆图
BFS:克隆图问题:思路:首先建立与原图节点个数相等的新节点,然后按照原图中边的连接规则,对新图中对应节点进行连接在建立新节点的过程中用map保存新节点与原节点的映射关系首先使用BFS遍历所有节点,每遍历到一个节点,创建一个与之对应的新节点,并用map保存它们的映射关系遍历map中所有的原图节点,找到它的邻接点数组,遍历该数组,按照原连接规则将新图的对应节点相连代码:/*// Definition for a Node.class Node {public: int v原创 2020-05-31 20:58:10 · 166 阅读 · 0 评论 -
Floyd算法(插点法):阈值距离内邻居最少的城市
Floyd算法(插点法):阈值距离内邻居最少的城市问题:思路:此题可将每个节点到其他节点的最短路求出,最后对距离矩阵遍历得到结果,即转化为多源最短路问题,可采用Floyd算法Floyd算法的思想是DP:通过已知条件初始化距离矩阵D[n][n],其中D[i][j]表示,顶点i到顶点j的距离。n个顶点依次作为插入点,例如,k为其中一个顶点,若D[i][k] + D[k][j] < D[i][j],那说明顶点i经过顶点k再到达j,比直接到达j要近。所以更新D[i][j]:D[i][j]原创 2020-05-31 20:22:58 · 407 阅读 · 0 评论 -
BFS题:颜色交替的最短路径
BFS题:颜色交替的最短路径问题:思路:颜色交替的解决办法:我们每次传递时,将上一次遍历的边的颜色信息带上,在下一次遍历时,选择不同的颜色的邻接节点,节点信息在队列中的存储为(node,color),即既存储节点的编号,又存储上一次遍历边的颜色信息由于存在环和平行边,使用数组visit[x][y][color] = 1,代表从节点x到节点y的且颜色为color的边被访问过,防止重复访问。对红色和蓝色边分别使用map建立邻接表,初始放入队列的信息为(0,1)和(0,0),分别表示从起点开始,下原创 2020-05-31 15:57:35 · 378 阅读 · 0 评论 -
DFS题:由斜杠划分区域
DFS题:由斜杠划分区域问题:思路:将每个格子划分为3x3的小网格,对角线上填充1表示斜杠,其余地方全为0不能划分为2x2的网格,因为这样格子中的0将不能用上下左右四个方向连通划分后问题转化为求一个3N x 3N的网格上的0连通块有多少块,采用DFS求解在DFS函数中对当前节点的四个方向上的点调用DFS函数,并将它们的值赋为1在主函数中对所有点进行遍历,若该点的值为0,则找到了一个0连通块,将其赋为1,并对其调用DFS使连通块中的所有0元素都变为1代码:class Solu原创 2020-05-31 10:35:28 · 192 阅读 · 0 评论 -
带权并查集:Leetcode 399 除法求值
带权并查集:Leetcode 399 除法求值问题:思路:构建带权值边的并查集,对于每个方程式有两种情况:查询是否联通,若不联通,则答案为-1.0若联通,则求出其与根相除的结果,根据结果计算方程式。例如,对于题目示例:构造并查集:a->b->c,其中a->b的边的权值为2.0,b->c的边的权值为3.0以计算b/a时为例,以root结点为桥梁,计算b/a的值:首先计算b/root,这里root为c,则b/c = 3.0然后计算a/root,这里root为c,则a原创 2020-05-31 09:57:01 · 225 阅读 · 0 评论 -
暴力BFS or 多源最短路 or DP: Leetcode 1162 地图分析
暴力BFS or 多源最短路 or DP: Leetcode 1162 地图分析问题:思路:暴力BFS:对所有海洋坐标点进行BFS,求出它们到最近陆地的曼哈顿距离,再从中选取最大值对每个(x,y)需向四个方向进行搜索,即(x,y+1),(x,y-1),(x+1,y),(x-1,y)需记录遍历到每个坐标点时已走过的距离,因此将坐标点定义为结构体,结构体成员为坐标以及已走过的距离由于求的是到最近陆地的曼哈顿距离,因此遍历到陆地BFS函数即可返回距离,无需和经典BFS一样等到队列为空多源最短原创 2020-05-30 16:40:50 · 327 阅读 · 0 评论 -
DFS+回溯思想 or Hierholzer 算法:Leetcode332:重新安排行程
DFS+回溯思想 or问题:思路:DFS+回溯思想:使用map保存邻接表,由于map是基于键值自动排序的,所以解决了要输出自然排序最小的行程组合的问题map的键类型为string,而值类型不使用vector< string >而是使用map<string,int>,用int保存机票的数量,因为输入中可能出现相同的机票DFS函数的作用是找到以参数start为起点的满足条件的路径,找到返回TRUE,否则返回FALSE。向DFS函数传参count,count表示已遍历的边数,原创 2020-05-29 19:33:24 · 332 阅读 · 0 评论 -
欧拉图、欧拉路径、Hierholzer 算法
欧拉图、欧拉路径、Hierholzer 算法本文参考于【图论】什么是欧拉图?如何求欧拉路径?不严谨的定义对于一个连通的图G,有:欧拉路径: 一条路径,它能够不重复地遍历完所有的边。这个性质很像不重复地一笔画完所有边,所以有些涉及到欧拉路径的问题叫做一笔画问题。欧拉回路: 一条路径,它能够不重复地遍历完所有的边,并且回到起点。可以看出欧拉回路也是欧拉路径。半欧拉图: 一个图,图中存在欧拉路径。欧拉图: 一个图,图中存在欧拉回路。可以看出欧拉图也是半欧拉图。图与欧拉路径、欧拉回路的结论连通的无转载 2020-05-29 10:48:28 · 1444 阅读 · 0 评论 -
反向图+拓扑排序 or 染色:Leetcode802 找到最终的安全状态
反向图+拓扑排序 or 染色:Leetcode802 找到最终的安全状态问题:思路:反向图+拓扑排序:对于一个节点 u,如果我们从 u 开始任意行走能够走到一个环里,那么 u 就不是一个安全的节点。换句话说,u 是一个安全的节点,当且仅当 u 直接相连的节点(u 的出边相连的那些节点)都是安全的节点。对于没有出度的节点,一定是最终安全的节点,而仅直接指向它的节点(出度为1,且指向没有出度的节点)也是最终安全的节点。以此类推,这样我们可以将所有的边全部反向,首先所有没有任何入度的节点都是安全的,原创 2020-05-27 11:06:48 · 251 阅读 · 0 评论 -
并查集题目:冗余连接
并查集题目:冗余连接问题:思路:以[1,2] [3,4] [3,2] [1,4] [1,5]为例初始状态:读取[1,2],将1的parent设为2,读取[3,4]同理读取[3,2],3所在的集合代表为4, 2所在的集合代表为2将4的parent设为2读取[1,4],1所在的集合代表为2, 4所在的集合代表也为2, 1和4属于同一集合, 1能通过路径到2, 4也能通过路径到2, 1能通过路径到4, 若再加入1到4的边,则1有两条路径到4,一定会出现环, 该条边即为要删除的边原创 2020-05-25 10:51:05 · 174 阅读 · 0 评论 -
并查集
并查集本文参考于傻子都能看懂的并查集入门并查集概述并查集顾名思义就是有“合并集合”和“查找集合中的元素”两种操作的数据结构。并查集不支持分割一个集合。用集合中的某个元素来代表这个集合,该元素称为集合的代表元。一个集合内的所有元素组织成以代表元为根的树形结构。对于每一个元素, parent[x]指向x在树形结构上的父亲节点。如果x是根节点,则令parent[x] = x。对于查找操作,假设需要确定x所在的的集合,也就是确定集合的代表元。可以沿着parent[x]不断在树形结构中向上移动,直到到达转载 2020-05-25 10:33:11 · 361 阅读 · 1 评论 -
拓扑排序变种题:Leetcode310最小高度树
拓扑排序变种题:Leetcode310最小高度树问题:思路:借用了BFS的思想,一次性将度为1的节点全部删除,不断进行此操作,直至只剩2个或1个节点正确性证明:无向无环图A在删除度为1的结点后得到无向无环图B。可以证明,图A所成最小高度树TreeA是由图B所成的最小高度树TreeB接上被删除结点后构成的。反证法:图B所成的树TreeB如果不是最小高度树,那么存在图B的最小高度树TreeB’,TreeB’的高度比TreeB更小。那么TreeB’接上被删除结点后高度比TreeA更小,这与Tree原创 2020-05-23 09:19:29 · 211 阅读 · 0 评论 -
简单染色问题:不邻接植花
简单染色问题:不邻接植花问题:思路:对图中的节点建立邻接表,设解向量的初值均为0,即均未染色,使用容器set存储4种颜色按顺序遍历图中的所有节点,在set中去除所有该节点的邻接表中节点已用过的颜色( erase(key_value) 删除键值为key_value的值 ),将set中的第一种颜色赋给该节点处理完所有节点后,返回解向量代码:class Solution {public: vector<int> gardenNoAdj(int N, vector<ve原创 2020-05-19 21:43:16 · 210 阅读 · 0 评论