![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图
文章平均质量分 78
yingsun
坚持下去~
展开
-
找出一个图中所有的强连通子图
如果一个有向图中的没对顶点都可以从通过路径可达,那么就称这个图是强连通的。一个 strongly connected component就是一个有向图中最大的强连通子图。下图中就有三个强连通子图:应用kosaraju算法,可以在O(v+e)的时间内找到强连通子图。下面是kosaraju算法的具体步骤:1,创建一个stack,对图进行深度优先遍历。对于每一个节点,当应用DFS遍历其所原创 2013-05-17 17:01:46 · 8484 阅读 · 0 评论 -
判断给定的图是否是有向无环图
判断给定的图是否是有向无环图,方法是应用拓扑排序,代码如下:#include#include#includeusing namespace std;class Graph { int vertexNum; list *adjacents;public: Graph(int _vertexNum) { vertexNum = _vertexNum; adjacent原创 2013-05-13 11:22:51 · 2015 阅读 · 0 评论 -
应用拓扑排序来解决DAG(directed acylic graph)的单源最短路径问题
熟悉图的人可以知道,对于单源最短路径的问题,我们可以用bellman-ford算法,或者dijkstra算法来解决,bellman-ford可以解决 有向无环图中边的权值为负数的情况,但是dijkstra不能解决复权值的问题。如果给定一个图G (v, e), bellman-ford求最短路径的时间复杂度是O(ve), 而dijkstra所用的时间是O(vlogv)。对于这两种方法就不介绍了。下面原创 2013-05-14 16:50:32 · 4354 阅读 · 0 评论 -
并查集-用并查集判断图中是否有环(能够应用到kruskal的最小生成树)
先不介绍并查集的概念,先从它的应用说起吧,它有两个功能,第一就是判断给定的一个节点是否属于某一个集合,更确切的说是属于哪个集合。第二个功能就是合并两个集合。 给定一组数据,如:1, 2, 3, 4, 5, 6, 7, 8, 9,他们是一个大的集合,但是也可以将他们每一个数字看成一个独立的集合,然后我们通过合并来形成一个由他们所有组成的大集合。有的人很奇怪,他们已经是一个集合了,为什原创 2013-05-15 17:38:58 · 9731 阅读 · 1 评论 -
kruskal的最小生成树
给定一个无向图,它的生成树是能够连接图中所有定点的的子图。一个图可以有很多个生成树,但是一个无向,带全图的最小生成树是生成树的所有边的权值之和小于任何一个生成树的权值之和。 一棵最小生成树的边是多少呢,设定这个图一共有V条边,那么最小生成树应该有V-1条边。 应用kruskal来解决最小生成树的问题的步骤为:1,将图中的所有的边按照权值的大小进行非降序排序。2,保留原创 2013-05-16 15:22:44 · 1366 阅读 · 0 评论 -
Connectivity in a directed graph
Given a directed graph, find out whether the graph is strongly connected or not. A directed graph is strongly connected if there is a path between any two pair of vertices. For example, following is原创 2013-06-04 11:19:01 · 3692 阅读 · 0 评论 -
判断图中是否包含欧拉路径或者欧拉环
欧拉路径的定义:对于无向图来说,欧拉路径就是通过每条边有且只有一次,如果遍历的起始点和终止点都是一个顶点的话,那么就说这个图存在欧拉环。上图中有三个例子,分别是欧拉路径和欧拉环,以及非欧拉路径。那么怎么来判断一个图中是否含有欧拉路径或者欧拉环呢。首先回想一下图的定义,图中有v个顶点,那么着v个顶点中有0个或者两个或者两个以上的顶点度数为奇数。接下来,求欧拉路径就相当于用笔画一个图,笔可原创 2013-06-16 16:00:07 · 9115 阅读 · 0 评论