无向图的割点(关节点)

2024-05-09 15:38
文章标签 关节点 无向 割点

本文主要是介绍无向图的割点(关节点),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

无向图的割点,也称关节点。对于无向图中不同的两点u,v,如果必须经过点w,才能构成一条从u到v的路径,那么称该w点就是割点(关节点)。关节点的求解只需要一次关于图的深度优先遍历(完成一次DFS等于生成一棵树,第一个访问的节点是根结点)。在这次DFS中,按照遍历的顺序记录每个点i的a,b表。其中,a表和b表的计算如下:


a[i]=predfn ; //predfn是点的深度遍历访问顺序,在深度遍历中一次确定

b[i]=min(a[i], b[j], a[j]);  // (i,j)属于图的边


另外,还需要明白两个“边”概念:

1. 树边:(i,j)边,i已被访问,j未被访问。

2. 回边: (i,j)边,i和j均被访问,但j的访问顺序先于i,即a[j]>a[i]。同时,j不能是i的父节点,即a[j]-a[i]!=1.


清楚了上面的概念后,请看下面的伪代码(出自《算法设计与分析》中第九章中的9.3.3小结,免费书的链接http://download.csdn.net/detail/u010232171/8484509)

ps:书中的伪代码可能因为排版的问题,容易造成对代码的误解。现在将伪代码重新编辑一

这篇关于无向图的割点(关节点)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/973793

相关文章

poj 2914 无向图的最小割

题意: 求无向图的最小割。 解析: 点击打开链接 代码: #pragma comment(linker, "/STACK:1677721600")#include <map>#include <set>#include <cmath>#include <queue>#include <stack>#include <vector>#include <cstd

图的割点、割线问题

图的割点问题 邻接矩阵表示图 package com.hyl.algorithm.other;import java.util.Arrays;import com.hyl.algorithm.search.base.SearchIntf;import com.hyl.algorithm.search.base.SearchIntfFactory;/*** 寻找图的割点* <p>** @aut

计算多图的等价无向图的邻接链表表示

计算多图的等价无向图的邻接链表表示 摘要:一、引言二、算法思路三、伪代码实现四、C代码实现五、算法分析六、结论 摘要: 在图论中,多图(Multigraph)是一种允许边重复以及存在自循环边(即一个顶点到其自身的边)的图。给定一个多图的邻接链表表示,本文旨在探讨如何构造一个等价的无向图,并给出其邻接链表表示。所谓等价的无向图,指的是在删除所有冗余的边和自循环边后,对于任意两个顶点

【Redundant Paths】【无向图】【双连通分量】【缩点】

Redundant Paths Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  Status In order to get from one of the  F(1≤F≤5,000)  grazing fields (which a

HIHO #1183 : 连通性一·割边与割点

题目链接 使用Tarjan算法计算无向图的割点和桥,提示讲解的也很清晰 需要注意的是,某一个割点可能会被多次计算,所以一般是先记录然后最后统一输出 1)按照题目的伪代码直接实现 2)稍微优化一下的,省一些空间 #include<bits/stdc++.h>using namespace std;#define cl(a,b) memset(a,b,sizeof(a))#define

卡尔曼滤波器、扩展卡尔曼滤波器、无向卡尔曼滤波器的详细推导

这段时间做轴承故障诊断和预测的时候,需要一个针对已经获取了特征向量的工具来对轴承故障状态进行估计和预测。卡尔曼滤波器可以实现对过去、当前和未来目标位置的估计,所以想通过卡尔曼滤波器的设计思路找到一些灵感。虽然最后发现:卡尔曼滤波器中的状态量是有具体的物理含义的物理量,而表征轴承故障状态的量只是一种表征量。这两者之间存在着本质的差别,因为轴承的退化过程目前为止还不能建模。虽然如此,我还是想将卡尔曼滤

P3388 【模板】割点(割顶)

~~~~~      P3388 【模板】割点(割顶) ~~~~~      总题单链接 割点的定义 ~~~~~      在一张无向图中,若删除一个点后连通块的数量会增加,那这个点就是割点。 怎么找割点 ~~~~~      按 d f s dfs dfs序 访问图上的每个点,每个点只访问一遍。 ~~~~~      先来看看时间戳的定义,若一个点的时间戳为 x x x,那

poj 1144 Network(割点)

http://poj.org/problem?id=1144 题意很简单,已知图中各边的连接情况,求割点的个数。 注意输入格式。。 #include<stdio.h>#include<vector>#include<string.h>#include<algorithm>using namespace std;vector<int> edge[110];int dfn[110]

POJ-1523 SPF 割点

题意:给你幅图,求割点 对每个点去掉后联通分量数; 裸Tarjan #include<stdio.h>#include<string.h>#include<vector>#include<queue>using namespace std;const int maxn = 1025;const int inf = 1<<29;int n,son;vector<int>

hiho #1127 : 二分图三·二分图最小点覆盖和最大独立集(无向图 二分图匹配)

题目链接:点击打开链接 #1127 : 二分图三·二分图最小点覆盖和最大独立集 时间限制: 10000ms 单点时限: 1000ms 内存限制: 256MB 描述 在上次安排完相亲之后又过了挺长时间,大家好像都差不多见过面了。不过相亲这个事不是说那么容易的,所以Nettle的姑姑打算收集一下之前的情况并再安排一次相亲。所以现在摆在Nettle面前的有2个问题: