typedef char VertexType; //顶点类型由用户自定义
typedef int EdgeType; //边上的权值类型由用户自定义
typedef struct Edge{ //边集数组
int u, v; //弧尾和弧头
int next; //指向同一个弧尾的下一条边
// EdgeType weight; //权值,对于非网图可以不需要
} EdgeLib;
EdgeLib edge[MAXM]; //存储边信息
int first[MAXN]; //指向顶点的第一条边
int flag[MAXN] = {0}; //存储顶点是否为割点
int num[MAXN] = {0}; //存储顶点的时间戳信息
int low[MAXN] = {0}; //存储顶点的最小时间戳信息
int index = 0; //用来进行时间戳的递增
void CreateGraph(int n, int m);//创建一个图
void PrintGraph(int n, int m);//输出图
void CutPoint_DFS(int root, int cur, int father);//采用深度优先搜索寻找割点(递归算法)
void CutPoint(int root, int n);//采用深度优先搜索寻找割点(非递归算法)
void CutPoint(int root, int n)//采用深度优先搜索寻找割点(非递归算法)
{
int Stack[MAXN]; //用来存储当前被处理顶点的栈
int SF[MAXN]; //指向顶点的第一条未搜索边
int child[MAXN] = {0}; //存储顶点的儿子数量
int k, u, v, top = 0;