![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图算法
文章平均质量分 87
wyc_
技术之路是千里之行,莫功利方能行更远
展开
-
单源最短路径
1.基础最短路径简单说就是,一个带权重的有向图,图中从u到v的最短路径就是所有从u到v的路径中权重之和最小的。最短路径具有最优子结构:两个节点之间的最短路径包含着其他的最短路径。这使得我们可以用动态规划或贪心算法来解决该问题。最短路径可以包含负权重的边,但是不能包含权重为负值的环路。当然也不能包含权重为正值的环路。下面介绍比较重要的最短路径和松弛操作的性质:三角不等式性质:原创 2014-12-22 16:33:02 · 965 阅读 · 0 评论 -
所有节点对的最短路径问题
前面在《单源最短路径》中我们接触了最短路径问题,并介绍了求解最短路径问题的算法,比如Bellman-Ford算法,Dijkstra算法。不过,那里我们计算的是从一个固定的源节点到所有其他点的最短路径。假如我们要想求任意节点对之间的最短路径呢?一个方法是以所有节点作为源节点调用上述比如Dijkstra算法,如果使用二叉堆实现最小优先队列时间复杂度为O(VElgV),如果使用斐波那契堆来实现最小优先队原创 2015-01-15 19:37:49 · 6565 阅读 · 0 评论 -
深度优先搜索
一、注意事项实现方法可分为递归和非递归。这里主要想说明一些注意事项。1.在实现图的深度优先遍历时搜索节点的顺序每次必须固定,回溯到某一点后会按照这个固定的顺序继续搜索当时还未搜索的节点,否则会因重复搜索相同的节点造成死循环。另外,为了避免出现环的重复搜索,需要记录已经搜索过的节点。2.在采用非递归方式实现深度优先遍历时,尤其值得注意的是需要记录每个节点当前搜索到的节点,下次回溯到此节点时,原创 2014-12-08 20:18:12 · 1380 阅读 · 0 评论 -
最小生成树
1.理论首先还是要搞清研究对象,简单说最小生成树问题就是找一个无环子集,它既能把所有的节点连接起来,又具有最小的权重。下面介绍一些定义切割:无向图G=(V,E)的一个切割(S,V-S)是集合V的一个划分。如果一条边(u,v) in E的一个端点位于S,另一个端点位于V-S,则称该边横跨切割(S,V-S)。如果集合A中不存在横跨该切割的边,则称该切割尊重集合A。在横跨一个切割原创 2014-12-20 21:32:16 · 710 阅读 · 0 评论 -
多源最短路径--Floyd-Warshall算法
上一篇文章《所有节点对的最短路径问题》中我们介绍到了Floyd-Warshall算法,由于代码较长,没有放到上一篇文章中,我们在这里单独给出Java实现的代码。 import java.util.*; class Floyd_Warshall { static final int MAX = 20; //最大点数 s原创 2015-01-21 21:06:05 · 555 阅读 · 0 评论 -
深度优先实现拓扑排序--java
import java.util.*;public class Topology{ static final int MAX = 20; //最大点数 static int[][] g; //图 static LinkedList queue; //保存排序结果 static int[] ingoing; //记录节点入度 static int[] outgoing;//记录节点出原创 2015-10-23 09:38:31 · 2827 阅读 · 0 评论 -
Ford-Fulkerson算法 java实现
/*for each edge(u,v) 属于 G,E(u,v).f = 0;while there exists a path p from s to t in the residual network Gfcf(p) = min{cf(u,v):(u,v) is in p};for each edge(u,v) in pif(u,v)属于E(u,v).f += cf原创 2015-10-22 18:48:08 · 1790 阅读 · 0 评论 -
最大流
1.流网络流网络G=(V,E)是一个有向图,图中每条边(u,v) in E有一个非负的容量值 c(u,v) >= 0。而且如果边集合E包含一条边(u,v),则图中不存在反向边(v,u)。在流网络的所有节点中,比较特殊的是源节点s和汇节点t,为了方便起见,假定每个节点都在源节点到汇节点的路径上,也就是说,流网络图是连通的。对于流,比较重要耳朵两条性质是:容量限制和流量守恒,流f的值是从源节点流出原创 2015-01-29 12:09:34 · 630 阅读 · 0 评论 -
稀疏图Johnson算法
在前面的文章《所有节点对的最短路径问题》中,我们介绍了用于稀疏图的Johnson算法,由于代码比较长,我们将其单独放在一篇文章之中。Johnson算法的时间复杂度在使用二叉堆作为最小优先队列的情况下为O((V^2 + EV)lgV);在使用斐波那契堆作为最小优先队列的时候为O(V^2lgV + VE),因此尤其是在稀疏图的情况下,其效率要比Floyd-Warshall高。下面给出Java实原创 2015-01-28 10:53:34 · 3293 阅读 · 1 评论 -
广度优先搜索
一、基础广度优先搜索需要注意的几点:1)需要对已经入队过的节点予以标记,防止进入死循环。这相当于《算法导论》伪代码中对节点进行着色的操作。2)广度优先搜索一定可以找到每一点到原点的最短路径,这里的最短路径只得是边的条数,如果我们要找一条权重之和最短的路径,依然可以用广度优先搜索算法。为了回溯信息,需要定义一个father数组,指向每个元素的父节点。代码见下面2import java.u原创 2014-12-06 17:34:04 · 841 阅读 · 0 评论 -
拓扑排序实例
在前面的文章《深度优先搜索》中介绍了拓扑排序,这里看两道相关题目1.Course ScheduleThere are a total of n courses you have to take, labeled from 0 ton - 1.Some courses may have prerequisites, for example to take course 0 y原创 2016-03-09 10:31:47 · 2742 阅读 · 0 评论 -
广度优先搜索实例
1.Symmetric TreeGiven a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).For example, this binary tree [1,2,2,3,4,4,3] is symmetric: 1 / \ 2 2 /原创 2014-12-15 17:58:00 · 1809 阅读 · 0 评论 -
深度优先搜索实例
前面文章《深度优先搜索》中介绍了深度优先搜索的相关知识,现在看一些实例,来加深理解运用。以下问题中涉及到的树的结构如下/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode ri原创 2014-12-16 10:39:51 · 3196 阅读 · 0 评论