图论
文章平均质量分 90
一个人在码代码的章鱼
加油!!!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构与算法-图论-复习2(差分约束,强连通分量,二分图,LCA,拓扑排序,欧拉路径和欧拉回路)
在递归返回后,说明该子节点的子树已经全部遍历完毕,将该子节点的状态设置为已遍历且子节点全部回溯完(状态 1),同时将子节点所在的并查集合并到当前节点所在的并查集(即将子节点的并查集代表元素设置为当前节点)。向上标记法的基本思想是先从节点 a 开始,将其到根节点的路径上的所有节点标记,然后从节点 b 开始向上遍历,第一个遇到的已标记节点就是 a 和 b 的最近公共祖先。对给定的树进行预处理,将每个节点的初始状态设置为未遍历(状态 3),并查集的每个元素的父节点初始化为自身,代表每个节点初始时属于独立的集合。原创 2025-04-09 22:46:46 · 1445 阅读 · 0 评论 -
数据结构与算法-图论-复习1(单源最短路,全源最短路,最小生成树)
以 “拯救大兵瑞恩” 为例,使用三维数组 d[x][y][st] 记录状态,其中 (x,y) 表示节点坐标,st 表示当前拥有的钥匙状态,只有拿到了钥匙才能进入到对应层的一些状态,在 BFS 或 Dijkstra 过程中更新状态。以 “可以免费建立 k 条边,求最小的花费” 为例,二分答案 mid,将边权大于 mid 的边视为 1,边权小于等于 mid 的边视为 0,使用双端队列 BFS 求解最短路,判断最短路径上大于 mid 的边数是否小于等于 k。对于边权为 1 的边,将其终点插入队尾。原创 2025-04-09 21:21:46 · 1203 阅读 · 0 评论 -
数据结构与算法-图论-强连通分量(tarjan算法)
在有向图 G 中,如果对于任意两个顶点 u 和 v,都存在从 u 到 v 以及从 v 到 u 的路径,则称图 G 是强连通图。强连通分量是有向图中的极大强连通子图,即该子图是强连通的,且不存在包含该子图且更大的强连通子图。基本思想:Floyd 算法是一种动态规划算法,用于计算图中任意两点之间的最短路径。对于每一对顶点 i 和 j,考虑是否通过中间顶点 k 能使路径更短,即 dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j])。原创 2025-03-25 15:25:49 · 1374 阅读 · 0 评论 -
数据结构与算法-图论-拓扑排序
它将图中的所有顶点排成一个线性序列,使得对于图中的任意一条有向边 (u, v),顶点 u 在序列中都出现在顶点 v 之前。因为拓扑排序的特性保证了在处理过程中,先处理的顶点级别不高于后处理的顶点级别,通过这种方式能得到满足车次运行要求的最少级别划分。可以将任务看作图的顶点,任务之间的依赖关系看作有向边,通过拓扑排序可以确定任务的执行顺序,确保在执行某个任务之前,其所有前置任务都已经完成。否则,图中存在环,不存在拓扑排序。对于该顶点的所有邻接顶点(即由该顶点出发的边指向的顶点),将它们的入度减 1。原创 2025-03-17 23:14:36 · 1245 阅读 · 0 评论 -
数据结构与算法-图论-最近公共祖先(LCA)(祖孙查询,距离,次小生成树)
在一棵有根树中,对于两个节点u和v,它们的最近公共祖先lca是指同时是u和v的祖先,且深度最大的节点。也就是说,lca是u和v在树中 “最深” 的共同祖先节点。例如,在一个家族树中,假设 A 是 B 和 C 的共同祖先,且不存在比 A 更接近 B 和 C 的共同祖先,那么 A 就是 B 和 C 的最近公共祖先。倍增算法(Binary Lifting)是一种非常实用的算法技巧,主要用于解决树上的一些查询问题,例如求最近公共祖先(LCA)、树上路径查询等。原创 2025-03-16 16:27:15 · 1245 阅读 · 0 评论 -
数据结构与算法-图论-欧拉路径和欧拉回路(有向图和无向图,骑马修栅栏,单词游戏 play on words)详细代码注解
/有向图的欧拉路径是入度和出度都相等or2个不等,一个出度大1的是start,另外一个是end。定义:在有向图中,从一个顶点出发,经过每条边恰好一次,并且遍历所有顶点的路径称为有向图的欧拉路径。定义:在有向图中,从一个顶点出发,经过每条边恰好一次,最后回到起始顶点的路径称为有向图的欧拉回路。定义:在无向图中,从一个顶点出发,经过每条边恰好一次,并且遍历所有顶点的路径称为无向图的欧拉路径。定义:在无向图中,从一个顶点出发,经过每条边恰好一次,最后回到起始顶点的路径称为无向图的欧拉回路。原创 2025-03-15 21:15:13 · 1502 阅读 · 0 评论 -
数据结构与算法-图论-二分图
若一个格子能通过马走 “日” 的规则到达另一个非障碍物格子,并且这两个格子属于不同的集合,那么它们之间存在一条边。输入与初始化。原创 2025-03-13 17:37:38 · 3477 阅读 · 0 评论 -
数据结构预算法-图论- 最小生成树-prim and kruskal
使用普里姆算法:若从顶点 A 开始,首先选择权值最小的边 AD,然后从与 A、D 相连的边中选择权值最小的 CD,接着选择 AB,再选择 BC,最后选择 CE,得到的最小生成树包含边 AD、CD、AB、BC、CE,总权值为 2 + 1 + 3 + 4 + 7 = 17。假设有一个无向连通加权图,顶点为 A、B、C、D、E,边及其权值分别为:AB (3)、AC (5)、AD (2)、BC (4)、BD (6)、CD (1)、CE (7)、DE (8)。它是原图的一个子图,具有以下特点:包含原图中所有的顶点;原创 2025-03-02 12:03:32 · 1471 阅读 · 0 评论 -
数据结构与算法-图论-最短路-floyd扩展
传递闭包是指在有向图中,对于所有顶点对,如果存在从顶点(i)到顶点(j)的路径(可以经过多个中间顶点),则在传递闭包中存在一条从(i)到(j)的有向边。在FloydWarshall算法的基础上,将距离初始化改为可达性初始化,若有直接边相连则可达性为(1),否则为(0)。在算法过程中,若(dist[i][k]=1)且(dist[k][j]=1),则(dist[i][j]=1),表示从(i)到(j)可达。原创 2025-02-27 22:03:17 · 1475 阅读 · 0 评论 -
数据结构与算法-图论-最短路-拓展运用
3. 状态更新:在 BFS 遍历过程中,对于当前顶点 $u$ 的每个邻接顶点 $v$ : - 如果 `dist[v]` 为无穷大,说明这是第一次访问到顶点 $v$,则 `dist[v] = dist[u] + 1`,`count[v] = count[u]`。在 BFS 的过程中,维护两个数组: - `dist[i]` 表示从顶点 1 到顶点 $i$ 的最短距离,初始化为无穷大,顶点 1 的距离初始化为 0。这是一道图论中的最短路径计数问题,要求计算从顶点1到图中其他每个顶点的最短路径的数量。原创 2025-02-26 23:44:24 · 1491 阅读 · 0 评论 -
数据结构与算法-图论-最短路和其他的结合
最短路算法常与深度优先搜索(DFS)、动态规划(DP)、二分答案、拓扑排序等算法结合使用:- 最短路与DFS结合:在一些图的路径问题中,当需要访问特定的多个结点,且数据范围较小时,可使用DFS。例如在一个有(n)个结点、(m)条无向边的图中,有(x)个结点必须访问,求最短路径。此时问题可转化为如何排列这(x)个结点,使得从起始结点依次经过其余结点所经过的路径最短。原创 2025-02-25 23:30:02 · 1530 阅读 · 0 评论 -
数据结构与算法-图论-最短路-单源最短路的建图方式
它基于贪心策略,从起始城镇(T_s)(源点)出发,不断选择距离源点最近的未确定顶点,更新其邻接顶点的距离,逐步确定到其他所有顶点的最短距离,最终得到到终点城镇(T_e)的最短路径和最小总费用。2. 转换问题:为了让(B)收到(100)元,设(A)转出的金额为(x)元,那么经过一系列转账路径后,最终到达(B)的金额为(x)扣除所有手续费后的剩余金额,要使其等于(100)元。首先将源点加入队列,然后不断取出队首顶点,对其邻接顶点进行松弛操作,如果某个邻接顶点的距离值被更新,且该顶点不在队列中,则将其加入队列。原创 2025-02-24 12:28:20 · 1567 阅读 · 0 评论
分享