
图论
文章平均质量分 72
practice
buptwhq
这个作者很懒,什么都没留下…
展开
-
二分图的最大匹配
2022.01.07二分图的最大匹配二分图的最大匹配给定一个二分图,其中左半部包含 n1n_1n1个点(编号 1∼n11∼n_11∼n1),右半部包含 n2n_2n2个点(编号 1∼n21∼n_21∼n2),二分图共包含 m 条边。数据保证任意一条边的两个端点都不可能在同一部分中。请你求出二分图的最大匹配数。二分图的匹配:给定一个二分图 G,在 G 的一个子图 M 中,M 的边集 {E} 中的任意两条边都不依附于同一个顶点,则称 M 是一个匹配。二分图的最大匹配:所有匹配中包含边数最多的原创 2022-01-07 22:38:03 · 827 阅读 · 0 评论 -
Kruskal求最小生成树
2022.01.07一、Kruskal算法1.基本思路2.例题一、Kruskal算法1.基本思路中心思想:从小到大枚举每条边,使得加边后不形成圈(不形成圈,则边的两点在两个连通块中,用并查集,初始时,每个点的祖先初始化为自己)。将所有边按权重从小到大排序 O(mlogm)枚举每条边ab,权重c if a,b不连通 将这条边加入集合中2.例题给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则原创 2022-01-07 19:52:34 · 354 阅读 · 0 评论 -
Prim求最小生成树
2022.01.07一、最小生成树几种算法的对比二、Prim算法1.一些概念2.基本思路3.Prim算法求最小生成树一、最小生成树几种算法的对比朴素版Prim算法主要用于稠密图,用邻接矩阵;堆优化版Prim用于稀疏图,用邻接表;Kruskal算法是一个很优美的算法,适用于稀疏图,且时间复杂度与堆优化版Prim一致,因此最小生成树一般用朴素版Prim和Kruskal。二、Prim算法1.一些概念树:连通、无圈图。生成树:如果一棵树T是连通图G的生成子图,则称树T为图G的生成树或支撑树。最小生原创 2022-01-07 16:11:56 · 1189 阅读 · 0 评论 -
Floyd求最短路
2022.01.07Floyd求最短路Floyd求最短路给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,边权可能为负数。再给定 k 个询问,每个询问包含两个整数 x 和 y,表示查询从点 x 到点 y 的最短距离,如果路径不存在,则输出 impossible。数据保证图中不存在负权回路。输入格式第一行包含三个整数 n,m,k。接下来 m 行,每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。接下来 k 行,每行包含两个整数 x,y,表示询问点原创 2022-01-07 00:35:43 · 142 阅读 · 0 评论 -
spfa求最短路与判断负环
2022.01.06spfa1.基本思路2.spfa求最短路spfa1.基本思路spfa是对Bellman-Ford算法的改进,Bellman-Ford的基本思路为:for n-1: for 所有边(a, b, w)边 //随便存,如定义一个结构体 dist[b] = min[dist[b], dist[a] + w]由上式知,并非每次min运算都会使dist[b]改变,只有当dist[a]更小了,dist[b]才能变小。因此可以开一个队列(或者其他的数据结构)来存储变小的a原创 2022-01-06 23:50:58 · 340 阅读 · 0 评论 -
Bellman-Ford算法
2022.01.06Bellman-Ford1.基本思路2.例题Bellman-Ford1.基本思路for n-1: for 所有边(a, b, w)边 //随便存,如定义一个结构体 dist[b] = min[dist[b], dist[a] + w]循环后一定满足:对于边ab,有dist[b] <= dist[a] + w(a,b)(三角不等式 松弛操作)定理最外层的第k次迭代得到的距离dist[b]为从起点到顶点b所经过的弧数不超过k的最短路的路长。注:该定原创 2022-01-06 16:16:20 · 323 阅读 · 0 评论 -
Dijkstra求最短路
2022.01.05#最短路几种算法的对比Dijkstra1.算法证明#最短路几种算法的对比Dijkstra1.算法证明引理1:根据该算法每次得到的点u对应的最短距离d(u)是递增的。证明:设SSS为已确定最短路的点的集合,SSS中依次确定的点为u0,u1,...,un−1u_0,u_1,...,u_{n-1}u0,u1,...,un−1,d[u]d[u]d[u]为SSS里点uuu的最短距离,dist[j]dist[j]dist[j]为SSS补集里点jjj的当前距离。考虑第kkk个得原创 2022-01-05 19:56:02 · 864 阅读 · 0 评论 -
树与图的存储与遍历
2022.01.05树与图的存储图的深度优先遍历1.树的重心图的广度优先遍历1.图中点的层次2.有向图的拓扑序列树与图的存储邻接矩阵:一个二维矩阵,点与点的关系。若有重边,则无法使用,可考虑保留一条。适用于稠密图。邻接表:类似链表,每个节点都开一个链表。可用数组来模拟链表。适用于稀疏图与大部分场景。树是一种特殊的图,连通、无圈图。图主要考虑有向图,因为无向图可理解为一种特殊的有向图,建图时将每条边换成两条有向边即可。图的深度优先遍历1.树的重心给定一颗树,树中包含 n 个结点(编号 1∼n)和原创 2022-01-05 16:53:29 · 247 阅读 · 0 评论 -
(BFS)走迷宫
2022.01.04广度优先遍历(BFS)走迷宫广度优先遍历(BFS)BFS通常用队列queue来实现,其所占用的空间为O(2^h)。当边权都是1时,最短路问题可用BFS来解决。一个常用的队列用法:while(队列不空){ t <- 队头; 扩展队头;}可用数组q[]来模拟队列:hh = 0, tt = 0;while(hh <= tt){ auto t = q[hh ++]; 扩展{ ... q[++ tt]原创 2022-01-04 23:56:09 · 366 阅读 · 0 评论 -
(DFS)排列数字与N皇后问题
2022.01.04深度优先遍历(DFS)排列数字N皇后问题深度优先遍历(DFS)DFS通常隐性调用栈结构stack,所占用的空间为O(h),也即通常保留当前搜索到的树的深度。较为执着,更符合计算机的习惯。 与广度优先遍历相比,不具有最短性。重要概念:回溯:从某结点出发可到达的路径都已扫描到,则可return回,注意恢复现场剪枝:从某结点出发的所有路径,根据限制条件,可提前去除一部分,例如排列数字中列的限制,N皇后中对角线的限制。排列数字给定一个整数 n,将数字1∼n排成一排,将会有很多种排列原创 2022-01-04 22:20:12 · 266 阅读 · 0 评论 -
矩阵最小权重对角线(DFS)
今日做图论课作业,4.5节第1题,尝试用代码实现之。思路dfs搜索,注意恢复现场。源码#include <iostream>using namespace std;const int N = 10;bool st[N]; // 标记每行搜索过的位置,注意恢复现场int path[N]; // 每行选出的数const int n = 5; int a[n][n];int ans = 0x3f3f;int pr[n]; // 记录最终答案的每行的位置void d原创 2022-01-03 21:20:04 · 950 阅读 · 0 评论