如果无向连通图不存在删除后剩下的图不再连通的顶点,则该图为双连通。如果不是双连通的图,那么那些删除后剩下的图不再连通的顶点叫做割点。
执行深度优先搜索,按照搜索顺序给顶点编号Num。然后后序遍历,计算顶点的Low值,其为顶点通过该序(可能包含背向边)能到达的最小顶点。
Low(v)为各项中的最小值:
1、Num(v)
2、所有背向边(v,w)中的最低Num(w)
3、所有边(v,w)中的最低Low(w)
根是割点当且仅当他有多于一个的儿子。其他顶点则为v有某个儿子Low(w)>=Num(v)。
图
深度优先搜索生成树
头文件
#include <vector>
#include <iostream>
using namespace std;
class Graph
{
public:
explicit Graph(int vertexNum):v(vertexNum+1)
{
for(auto x:v)
{
x.parent=nullptr;
x.adjacentList=vector<Vertex*>{};
x.visited=false;
x.num=0;
x.low=0;
}
}
void setVertex(int vertexIndex,const vector<int> & adjacentIndex)
{
//创建邻接表
for(auto i:adjacentIndex)
{