在DFS中,递归调用的栈是记录当前正在遍历的有向路径如果找到一条边v->w并且w在栈中,此时就找到一个环,因为在栈中表示的是一条从w到v的有向路径,加上v->w,构成一个环。
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <stack>
using namespace std;
struct node /* 图顶点结构定义 */
{
int vertex; /* 顶点数据信息 */
struct node *nextnode; /* 指下一顶点的指标 */
};
const int vertexnum = 4; /*顶点的数目*/
const int instance = 5;
typedef struct node *graph; /* 图形的结构新型态 */
struct node head[vertexnum+1]; /* 图形顶点数组 */
int visited[vertexnum+1]; /* 遍历标记数组 */
int id[vertexnum+1]; /*标记连通分量的编号*/
int edgeto[vertexnum+1]; /*标记节点前继*/
int onstack[vertexnum+1]; /*标记栈中节点*/
int count = 0; /*连通分量编号*/
int edgenum = 0; /*边的数目*/
/********************根据已有的信息建立邻接表********************/
void cr