int flag[MAXN] = {0}; //存储顶点是否为割点
int num[MAXN] = {0}; //存储顶点的时间戳信息
int low[MAXN] = {0}; //存储顶点的最小时间戳信息
int index = 0; //用来进行时间戳的递增
void CreateGraph(VertexNode *GL, int n, int m);//创建一个图
void PrintGraph(VertexNode *GL, int n, int m);//输出图
void CutPoint_DFS(VertexNode *GL, int root, int cur, int father);//采用深度优先搜索寻找割点(递归算法)
void CutPoint(VertexNode *GL, int root, int n);//采用深度优先搜索寻找割点(非递归算法)
int main()
{
int i, m, n;
VertexNode GL[MAXN];
printf("请输入顶点数量和边数量:\n");
scanf("%d%d", &n, &m);
CreateGraph(GL, n, m);//创建一个图
PrintGraph(GL, n, m);//输出图
void CutPoint(VertexNode *GL, int root, int n)//采用深度优先搜索寻找割点(非递归算法)
{
int Stack[MAXN]; //用来存储当前被处理顶点的栈
EdgeNode *SF[MAXN], *e;
int child[MAXN] = {0}; //存储顶点的儿子数量
int u, v, top = 0;
for (u=0; u<n; u++)//初始化SF
SF[u] = GL[u].firstEdge;