先明白一些概念。
割点:若一个点删除后(也就是与之相连的边统统去掉),无向图不再连通,那么此点称为割点。
桥:若一条边断去后,无向图不再连通,那么此边称为桥。桥有一个很好的性质,就是DFS一个无向图,那么这个过程必定要经过桥。
块:没有割点的无向图称为2-连通分支,也称作块。
割点、桥均可以在DFS的过程中求得。
那么,对于一个无向图有以下操作:
1.将一个无向图的块缩成一个点。这个时候要注意,一个点是有可能在两个块之中的,因此不能用floodfill来求块,也不能仅用一个一维数组标记某点在哪个块之中。其中一种正确的方法是在DFS时使用一个辅助栈,每次访问一个节点时将该节点进栈,在遇到割点的时候将栈内的元素退栈,直到退到当前节点。那么这一次退出来的节点,再加上当前割点,必定就是一个块。
2.很多人说的“缩点”,其实并不是指缩块。而是指将无向图中没有割边的子图缩成一个点。这样缩点之后图就会变成一棵树,树上的边必定是一条桥。此外,如果这样缩点,那么一个节点只能在其中的一个“块”内。这个道理很明显,一个桥若断开,就把图分成不连通的两部分。一个点不可能同时在这两个部分中。
这个缩点的方法很多,既可以像上面那样,在DFS的时候用栈处理,也可以在DFS后将图上的桥断开,然后floodfill。不过这个方法虽然容易理解,但似乎只能用在邻接矩阵中,而且复杂度比较高。
处理问题的时候必须先弄清楚题目的意思,题目要求的是点的连通性,还是边的连通性。根据要求我们再去“缩点”,“缩块”。举个例子:某网络中由服务器和网线组成,问哪些服务器瘫痪后,整个网络就被隔开,不能通信,这个明显问的就是割点。但是,如果问题改成,如果哪些网线断开后,整个网络就不能通信,那么这个问的就是桥。
下面举一些POJ的题目作为例子:
POJ 2942 - Knights of the Round Table
这个题就是明显的缩块。
POJ 1523 - SPF
这个应该是点连通性
POJ 3177 - Redundant Paths
POJ 3352 - Road Construction
POJ 3694 - Network
这三个题目都是关于边连通性
有向图的连通性
强连通:对于一个图G中任意的两个节点u与v,如果都存在一条u到v与v到u的路径,那么则称此图为强连通图。
非连通图的极大强连通子图称为强联通分量。
有向图缩点:也就是把所有强联通分量缩成一个点后构成的新图。缩点的算法为Kosaraju和Tarjan算法。
Kosaraju需要两次DFS,但是比较容易理解,Tarjan似乎是一次DFS,本人没有接触过。个人认为,在竞赛中,Kosaraju算法实现简单,比较实用。Kosaraju怕的不是大数据,而是多数据。因为如果数据规模大,那么无论是Kosaraju,还是Tarjan,只要写成递归的都会爆栈。这样一次DFS和两次DFS也就没有区别了。
有向图缩点的题目很多,比较经典的如下:
POJ 1236 - Network of Schools
所谓的“最小点基”。
有向图缩点一个很大的应用,就是2-SAT问题。如:
POJ 3678 - Katu Puzzle
POJ 3683 - Priest John's Busiest Day
这类问题比较多。
总结一下:
我所知道的”缩点“就是三种:
无向图缩块(缩无割点子图)
无向图缩无割边子图
有向图缩强连通分量
先明白一些概念。
割点:若一个点删除后(也就是与之相连的边统统去掉),无向图不再连通,那么此点称为割点。
桥:若一条边断去后,无向图不再连通,那么此边称为桥。桥有一个很好的性质,就是DFS一个无向图,那么这个过程必定要经过桥。
块:没有割点的无向图称为2-连通分支,也称作块。
割点、桥均可以在DFS的过程中求得。
那么,对于一个无向图有以下操作:
1.将一个无向图的块缩成一个点。这个时候要注意,一个点是有可能在两个块之中的,因此不能用floodfill来求块,也不能仅用一个一维数组标记某点在哪个块之中。其中一种正确的方法是在DFS时使用一个辅助栈,每次访问一个节点时将该节点进栈,在遇到割点的时候将栈内的元素退栈,直到退到当前节点。那么这一次退出来的节点,再加上当前割点,必定就是一个块。
2.很多人说的“缩点”,其实并不是指缩块。而是指将无向图中没有割边的子图缩成一个点。这样缩点之后图就会变成一棵树,树上的边必定是一条桥。此外,如果这样缩点,那么一个节点只能在其中的一个“块”内。这个道理很明显,一个桥若断开,就把图分成不连通的两部分。一个点不可能同时在这两个部分中。
这个缩点的方法很多,既可以像上面那样,在DFS的时候用栈处理,也可以在DFS后将图上的桥断开,然后floodfill。不过这个方法虽然容易理解,但似乎只能用在邻接矩阵中,而且复杂度比较高。
处理问题的时候必须先弄清楚题目的意思,题目要求的是点的连通性,还是边的连通性。根据要求我们再去“缩点”,“缩块”。举个例子:某网络中由服务器和网线组成,问哪些服务器瘫痪后,整个网络就被隔开,不能通信,这个明显问的就是割点。但是,如果问题改成,如果哪些网线断开后,整个网络就不能通信,那么这个问的就是桥。
下面举一些POJ的题目作为例子:
POJ 2942 - Knights of the Round Table
这个题就是明显的缩块。
POJ 1523 - SPF
这个应该是点连通性
POJ 3177 - Redundant Paths
POJ 3352 - Road Construction
POJ 3694 - Network
这三个题目都是关于边连通性
有向图的连通性
强连通:对于一个图G中任意的两个节点u与v,如果都存在一条u到v与v到u的路径,那么则称此图为强连通图。
非连通图的极大强连通子图称为强联通分量。
有向图缩点:也就是把所有强联通分量缩成一个点后构成的新图。缩点的算法为Kosaraju和Tarjan算法。
Kosaraju需要两次DFS,但是比较容易理解,Tarjan似乎是一次DFS,本人没有接触过。个人认为,在竞赛中,Kosaraju算法实现简单,比较实用。Kosaraju怕的不是大数据,而是多数据。因为如果数据规模大,那么无论是Kosaraju,还是Tarjan,只要写成递归的都会爆栈。这样一次DFS和两次DFS也就没有区别了。
有向图缩点的题目很多,比较经典的如下:
POJ 1236 - Network of Schools
所谓的“最小点基”。
有向图缩点一个很大的应用,就是2-SAT问题。如:
POJ 3678 - Katu Puzzle
POJ 3683 - Priest John's Busiest Day
这类问题比较多。
总结一下:
我所知道的”缩点“就是三种:
无向图缩块(缩无割点子图)
无向图缩无割边子图
有向图缩强连通分量
分享到:
相关推荐
### 有向图与无向图连通性判断详解 #### 一、有向图与无向图的基础概念 **1.1 有向图(Directed Graph)** - **定义**:有向图由一组节点(vertices)和一组带有方向的边(edges)组成。每条边从一个节点指向另一...
无向图连通分支在计算机科学中是一个重要的概念,特别是在图论和算法设计领域。它涉及到如何识别并分割一个无向图中的各个连通部分,这些部分是图中任意两个节点都存在路径相连的子图。在给定的标题“无向图连通分支...
#### 一、无向图与连通性的定义 在数据结构中,无向图是一种常见的图结构,其中边没有方向性,即边是双向的。无向图可以用来表示很多实际问题中的关系网络,如社交网络、计算机网络等。 - **连通性**:对于无向图...
判断有向图和无向图的连通性
如果边没有方向性,则称这样的图为无向图。在图论中,深度优先搜索(Depth-First Search, DFS)是一种用于遍历或搜索树或图的算法。 #### 二、无向图的深度优先遍历原理 根据题目描述,我们可以通过以下步骤来实现...
在无向图中,如果对于任意两个不同的顶点,都存在一条路径连接它们,那么这个图被称为连通图。如果不存在这样的路径,则称该图不连通。连通性是图的基本属性,对于理解和分析图的结构至关重要。 Warshall算法的核心...
在图论中,如果在无向图中,任意两个顶点之间都存在路径,那么这个图被称为连通图。如果图不是连通的,即存在至少两个顶点之间没有路径,那么这个图就被称为非连通图。连通图可以进一步分为若干个互不相交的连通子图...
由函数随机产生一简单无向图的邻接矩阵,并输出是否连通
### 建立一个带权无向图用邻接矩阵表示,判断此图是否连通 在本篇文章中,我们将探讨如何使用邻接矩阵...综上所述,通过使用邻接矩阵表示带权无向图,并结合Prim算法,我们可以有效地解决图的连通性和最小生成树问题。
资源名:搜索算法_广度优先搜索算法判断图的连通性_matlab 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 适合人群:...
在提供的压缩文件"jk.m"中,很可能是使用MATLAB语言实现的图连通性判断代码。MATLAB是一种强大的数值计算和数据分析工具,适合于实现这类算法。该文件可能包含了上述算法的实现,通过读取用户输入的邻接矩阵,判断图...
- `kind`: 表示图的类型,0表示无向图,1表示有向图。 #### 创建邻接矩阵表示的图 创建函数`create_MG()`实现了输入顶点数量、边数量、图类型等信息的功能,并允许用户输入具体的顶点和边。例如: ```c void ...
对于无向图,邻接矩阵是对称的,其中的元素a[i][j]等于1,如果顶点i和j之间有边,否则等于0。对于有向图,邻接矩阵可能不对称,因为边的方向可能不同。通过分析邻接矩阵,我们可以快速检查两个顶点之间是否存在边,...
无向图是一种数据结构,其中的边不具有方向性,即每个连接两个节点的边都可以从任一端点出发到达另一端点。最小生成树(Minimum Spanning Tree, MST)是无向图的一个经典概念,它在图论和网络优化问题中广泛应用。 ...
广度优先搜索算法判断图的连通性 在计算机科学和信息科学中,图论是一个重要的研究方向。图是一种非线性数据结构,用于描述事物之间的关系。在图论中,判断图的连通性是一个重要的问题,即判断图中的所有节点是否...
计算无向图中各节点的度,可以帮助我们更好地理解图的结构和特性,比如识别出中心节点或者分析网络的连通性。 Python中有一个强大的图论库叫做networkx,它提供了非常丰富的图结构和算法处理功能。本实例中,我们...
在计算机科学中,图是表示数据之间关系的一种结构,而判断图的连通性是图论中的一个基础问题。连通图是指图中任意两个顶点之间都存在路径...同时,这种方法还可以用于寻找图中的最短路径、求解有向图的拓扑排序等问题。
3. 强连通分量:在无向图中,如果两个顶点可以通过相互之间的路径互相到达,它们构成了强连通分量。Tarjan算法和Kosaraju算法可以有效地找出图中的所有强连通分量。 四、实验设计与调试过程 实验报告中可能包含了...