对树中任意节点V而言,其孩子结点为在他之后搜索到的邻接点,而其双亲结点和由回边联结的祖先结点s是在他之前搜索到的邻接点。由深度优先生成树可以得出两类关节点的特性:
1,若生成树的根有两颗或两颗以上子树,则此跟顶点必为关节点。
2,若生成树中某个非叶子结点V,其某棵子树的根和子树中的其他结点都没有指向V的祖先的回边,则V为关节点。
辅助数组visited[v]的值即为v在深度优先生成树的前序序列中的序号。
辅助数组low[v]的值为后续优先生成树的序号。而v在后续序列中的次序号和遍历时退出DFS函数的次序号相同。
以下算法,如果顶点可以把图中的不同部分分成几个独立的子树,这个顶点有可能被多次输出。例如图中的B结点。删除它可以独立出两个不同的子块{D,E}和{G,H,I,K}所以B被输出了两次。
代码*********
#include “pch.h”
#include
#include
using namespace std;
class Graph
{
public:
char * vertex;//顶点集
bool * arc;//边集
int vertexnum;
int arcnum;
Graph(int _verte