图论
文章平均质量分 85
x__1998
这个作者很懒,什么都没留下…
展开
-
Bellman-Ford-解决负权边的最短路径
之前写了一个Floyd-Warshall解决多源最短路径问题的博客传送门现在看到Bellman-Ford算法好像也有异曲同工之妙,重点是核心算法都很短^_^。当初Floyd-Warshall算法为了解决一个点到另一个点的最短路,必须将其中间可作为中转点的最短路径算出来,这样使时间复杂度为n^3。优点是打了个表可以查询任意两点的最短路径。但是其不可以解决带有负权边的问题,否则会导致出错。而Bellm...原创 2018-03-15 00:10:01 · 306 阅读 · 0 评论 -
Floyd-Warshall解决多源最短路径问题-(只有五行的算法)
首先来看一张图使用邻接矩阵储存形式如下现在假设我们需要从1号节点走到4号节点最短路径权值是多少呢?我们来模拟一下0264以上表格依次为1号节点到其他节点的路径权值。我们现在想求1号到4号的距离目前看是4.。这是直达的方式,可是我们还可以选择中转来达到4号点,如果选择2号点为中转呢?1到2权值为2,2到4不连通,说明次中转方案不可行。那只能选择3号点了,按照之前的方式计算中转路径权值为7,大于直达方...原创 2018-03-11 16:42:24 · 684 阅读 · 0 评论 -
贪心生成最小生成树-克鲁斯卡尔(Kruskal)算法(归并排序)(并查集)
这个最小生成树的算法倒是比Prim算法更容易理解并且更好实现,但是在此之前需要学习并查集的算法,主要思想是对边进行排序,然后依次选取n-1条最短的边就能把n个节点连接起来。但是如果有一条边将几个节点形成了一个环,那么这条边就不能加入最小生成树如下图:此时1 2 3号节点已经连接完成,假设接下来选取最小的边是2-3的边,将其连接的话就会形成环!但是很明显此时2-3的边完全不需要连接,因为不加入2-3...原创 2018-03-09 22:25:35 · 1024 阅读 · 0 评论 -
Prim算法生成最小生成树详解
创建一个low数组代表相应每个节点连接所需最小费用,一个vis数组标记相应节点是否连接过。low数组的初始值用节点1到其余各点的费用来填充如该图所示low数组的初始值应该为:06345以上便是1号节点对于其他各点的费用接下来在low数组中寻找最小值 为3号节点费用为3最小。接着以3号节点为起始点更新06345接下来在low数组中寻找最小值 为4号节点费用为4最小。同理以4号节点为起始点更新06...原创 2018-03-08 22:31:52 · 2204 阅读 · 0 评论 -
Dijkstra算法解决单源最短路径
Dijkstra用于解决一个节点到其他任意节点的最短路径值。其值用一个dis数组保存。首先给出一个有向图使用邻接矩阵储存。dis数组初始化为1节点到其他节点的距离。0112infinfinf初始化无法直达的节点都表示为无穷大(inf)。接下来在这个数组中寻找最近的节点-->2。然后通过2节点为起点去优化dis数组。很明显2号节点到3号节点权值为9,1->2->3小于1->3...原创 2018-03-27 21:13:44 · 351 阅读 · 0 评论