- 博客(13)
- 资源 (1)
- 收藏
- 关注
原创 BFS学习总结
BFS学习总结 给你一个n*m的网格迷宫,迷宫中有些格子不能走,其他的格子都能走。然后给你起点与终点,问你从起点走到终点最少需要多少步? 上面的问题就是一个典型的BFS问题,对于这类问题来说,只要你掌握了这类问题的关键思想,其实他们都是可以用类似的思路来做的。建议先做两道BFS简单题,体会一下。 你可以把BFS问题想象成:从一个父亲(起点
2015-04-15 23:53:09 4242 2
原创 网络流
网络流 网络流问题的详细介绍可以看刘汝佳>和>相关部分。注意:下面的网络流模板里面考虑的都是有向图,如果要处理无向图,那么对于无向图的每条边,你需要再图上添加两个方向的边各一条且流量费用相同。 熟练模板并不是问题,问题是如何把实际的问题转化为网络流的问题来解决。直接给出最大流的模板://最大流模板,可处理重边//且节点编号从1到n,边编号从0到m
2015-04-13 21:29:12 2882
原创 二分图匹配
二分图匹配 给定一个二分图G(无向图),在G的一个子图M中,M的边集中的任意两条边都不依附于同一个顶点,则称M是一个匹配. 选择这样的边数最大的子集称为图的最大匹配问题(maximal matchingproblem) 如果一个匹配中,图中的每个顶点都和图中某条边相关联,则称此匹配为完全匹配,也称作完备匹配。 如果该二分图的每条边
2015-04-11 23:10:56 2221
原创 最小生成树
最小生成树 一个有 n 个结点的连通图的最小生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的权值总和最小的边。刘汝佳>P343详细介绍了最小生成树相关的知识。 下面直接给出Kruskal算法的模板:#include#include#include#include#includeusing namespace std
2015-04-05 01:20:54 2228 2
原创 Bellman_Ford算法
Bellman_Ford算法 Bellman_Ford算法也是求单源最短路径的算法,但是它能算带负权边的图的最短路径(对于带负圈的图就无能为力),且可以判断当前图是否带有负圈。它的时间复杂度是O(n*m),其中n为点数,m为边数。 Bellman_Ford算法为什么能求得单源最短路径呢?因为它一共松弛n-1轮,每轮遍历了所有的边,所以它每轮至少要生成一个点的
2015-04-04 22:30:20 1737
原创 Floyd算法
Floyd算法 Floyd算法又称为插点法,是一种用于寻找给定的加权图中多源点之间最短路径的算法。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。 注意:由下面的练习可以看出,其实很多题目不是直接问你floyd怎么求最短路径,而是要你利用floyd的动态规划思想解决类似floyd的问题。 Floy
2015-04-04 19:14:04 2550
原创 Dijkstra单源最短路径
Dijkstra单源最短路径 给定一个带权有向图G=(V,E) ,其中每条边的权是一个非负实数。另外,还给定 V 中的一个顶点,称为源。现在我们要计算从源到所有其他各顶点的最短路径长度。这里的长度是指路上各边权之和。这个问题通常称为单源最短路径问题。 下面给出两个计算单源最短路径的模板。Dijkstra_简化版:时间复杂度O(n^2),不可处理重边图
2015-04-04 14:14:25 2229 1
原创 2-SAT问题
2-SAT问题 现有一个由N个布尔值组成的序列A,给出一些限制关系,比如A[x]AND A[y]=0、A[x] OR A[y] OR A[z]=1等,要确定A[0..N-1]的值,使得其满足所有限制关系。这个称为SAT问题,特别的,若每种限制关系中最多只对两个元素进行限制,则称为2-SAT问题。 由于在2-SAT问题中,最多只对两个元素进行限制,所以可能的限制关
2015-04-03 19:17:37 1517 1
原创 有向图的强连通分量
有向图的强连通分量 有向图强连通分量在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量(strongly connected components)。
2015-04-03 11:10:25 2562
原创 无向图的双连通分量
无向图的双连通分量 点-双连通图:一个连通的无向图内部没有割点,那么该图是点-双连通图。 注意:孤立点,以及两点一边这两种图都是点-双连通的。因为它们都是内部无割点。 边-双连通图:一个连通的无向图内部没有桥,那么该图就是边-双连通的。 注意:孤立点是边-双连通的,但是两点一边不是边-双连通的。 由上面定义可
2015-04-02 18:45:47 3957
原创 无向图求割顶与桥
无向图求割顶与桥 对于无向图G,如果删除某个点u后,连通分量数目增加,称u为图的关节点或割顶。对于连通图,割顶就是删除之后使图不再连通的点。如果删除边(u,v)一条边,就可以让连通图变成不连通的,那么边(u,v)是桥。 具体的概念和定义比较多,在刘汝佳训练指南>>P312-314页都有详细的介绍。 下面来写求无向图割顶和桥的DFS函数.我们令p
2015-04-02 14:14:22 2292 3
原创 拓扑排序
拓扑排序 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。 一个有向图无法拓扑排序时只有一种情况:该有向图中存在环。下面给出简单的判定有向图是否可拓扑排序的代码:题意:给你一个N点和M条有向边的图,问
2015-04-01 16:52:21 1658 1
原创 欧拉图详解
欧拉图详解 通过图(无向图或有向图)中所有边一次且仅一次行遍图中所有顶点的通路称为欧拉通路,通过图中所有边一次且仅一次行遍所有顶点的回路称为欧拉回路。具有欧拉回路的图称为欧拉图(Euler Graph),具有欧拉通路而无欧拉回路的图称为半欧拉图。 1定义 欧拉通路(Euler tour)——通过图中每条边一次且仅一次,并且过每一顶点的通路。
2015-04-01 13:18:37 11398
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人