![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
graph
往者之不谏
剑未配好,出门便是江湖
展开
-
有向图中的可达性(深度优先)
使用深度优先搜索来解决有向图中节点的可达性问题,分为单点可达性和多点可达性。DiGraph为有向图结构,请参考上篇《邻接表的有向图》实现 单点可达:给定一副有向图和一个起点s,求是否存在一条从s到v的路径。 多点可达:给定一幅有向图和一个节点的集合,求是否存在一条从集合中的任意顶点到给定顶点的有向路径。 有向图的可达性API: public class DirectedDFS ...原创 2018-08-26 12:26:06 · 2348 阅读 · 0 评论 -
判断有向图是否有环
要想对一副有向图进行拓扑排序,必须要保证有向图是无环的,那么我们如何判断图是否含有环呢?我们可以使用深度优先搜索来遍历图,并创建一个数组来标记顶点是否已经在递归栈中,这样,当一个顶点指向的顶点已经在递归栈中,说明存在一个环,使用一个数组来记录当前遍历节点的上一个节点,这样就能得到这个环中的所有节点了。 有向环的API public calss DirectedCycle ...原创 2018-08-28 00:25:48 · 2000 阅读 · 0 评论 -
有向图中基于深度优先搜索的顶点排序
它的基本思想是深度优先搜索正好会只访问每个顶点一次。如果将dfs()的参数顶点保存在一个数据结构中,遍历这个数据结构实际上就能访问图中的所有顶点,遍历的顺序取决于这个数据结构的性质以及是在递归之前还是之后进行保存。在典型的应用中,主要有三种排序顺序: 前序 :在递归调用之前将顶点加入队列 后序:在递归调用之后将顶点加入队列 逆后序:在递归调用之后将顶点压入栈 API: public cl...原创 2018-08-28 10:41:38 · 1213 阅读 · 0 评论 -
无向图邻接表实现
图是由一组顶点和一组能够将两个顶点相连的边组成,使用邻接表来组建,即使用一个背包数组来实现。节点由0带V-1组成,节点数为V,边数为E. API: public class Graph Graph(int V) 创建一个含有V个顶点但不含边的无向图 int V() ...原创 2018-08-25 22:26:26 · 2888 阅读 · 0 评论 -
无向图的深度优先搜索
无向图的深度优先搜索简单易懂,通过栈实现,需要一个图,图的实现请看上篇,使用一个数组来标记图中的节点是否被遍历过,从顶点开始遍历,每次找到与节点相连的节点遍历。具体实现如下: API DepthFirstSearch(Graph G, int s) 找到和起点s连通的所有顶点\ ...原创 2018-08-25 22:48:09 · 856 阅读 · 0 评论 -
无向图的广度优先遍历
无向图的广度优先遍历通过队列来实现,广度优先队列可以用来实现查找最短路径,也就是距离两个点之间边最少的路径,先让顶点进队列,然后出队列,把和顶点相连通的点入队列,借助队列的先入先出特性来实现广度优先遍历。寻找路径的API如下:(Graph 请看前面无向图的邻接表实现) BreadthFirstPaths(Graph G, int s) 在G中...原创 2018-08-25 23:14:39 · 4057 阅读 · 0 评论