图论算法
文章平均质量分 87
YF_Li123
生活需要奔跑
展开
-
C++ 最小生成树之Prim(普里姆)算法
最小生成树之Prime(普里姆)算法最小生成树:是在一个给定的无向图G(V,E)中求一棵树T,使得这棵树拥有图G中的所有顶点,且所有边都是来自图G中的边,并且满足整棵树的边权之和最小。如上图给出了一个图G及其最小生成树T,其中红色的线即为最小生成树的边。最小生成树T包含了图G中所有的顶点,且由它们生成的树的边权之和为15,是所有生成树中权值最小的。最小生成树有3个性质:原创 2017-07-15 11:29:29 · 8059 阅读 · 3 评论 -
C++ 求最短路径问题之Dijkstra算法(一)
求最短路径之Dijkstra算法Dijkstra算法是用来求单源最短路径问题,即给定图G和起点s,通过算法得到s到达其他每个顶点的最短距离。基本思想:对图G(V,E)设置集合S,存放已被访问的顶点,然后每次从集合V-S中选择与起点s的最短距离最小的一个顶点(记为u),访问并加入集合S。之后,令u为中介点,优化起点s与所有从u能够到达的顶点v之间的最短距离。这样的操作执行n次(n为顶点个数)原创 2017-07-02 09:21:51 · 26204 阅读 · 6 评论 -
C++ 求最短路径问题之Dijkstra算法(二)
求最短路径问题之Dijkstra算法(二)(4)、Dijkstra算法求解实际问题之前讲的是最基本的Dijkstra算法,那么平时考试笔试等遇到的题目肯定不会这么“裸”,更多时候会出现这样一种情况,即从起点到终点的最短距离最小的路径不止一条。那么碰到这种两条以上可以达到最短距离的路径,题目就会给出一个第二标尺(第一标尺是距离),要求在所有最短路径中选择第二标尺最优的一条路径,而第二原创 2017-07-02 09:28:57 · 3940 阅读 · 0 评论 -
C++ 最小生成树之kruskal(克鲁斯卡尔)算法
最小生成树之kruskal(克鲁斯卡尔)算法kruskal算法:同样解决最小生成树的问题,和prim算法不同,kruskal算法采用了边贪心的策略,思想要比prim算法简单。关于prim算法可参考:最小生成树之Prim(普里姆)算法算法基本思想:在初始状态时隐去图中的所有边,这样图中每个顶点都自成一个连通块。之后执行下面的步骤:(1)对所有的边按边权从小到大原创 2017-07-16 08:44:10 · 9449 阅读 · 9 评论 -
C++ 拓扑排序算法
拓扑排序有向无环图 如果一个有向图的任意顶点都无法通过一些有向边回到自身,那么称这个有向图为有向无环图。拓扑排序 拓扑排序是将有向无环图G的所有顶点排成一个线性序列,使得对图G中的任意两个顶点u、v,如果存在边u->v,那么在序列中u一定在v前面,这个序列又被称为拓扑序列。如下图:结点0和1没有前驱节点,可以任意访问,但是结点2必须在结点原创 2017-08-18 10:29:05 · 14946 阅读 · 8 评论