代码与10月22号已更正, 多谢 lbhqfwj 提出来:
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
const int MAX = 1000;
int color[MAX];
int Time;
bool is_DAG; // 分别是时间撮,是否有环
int first[MAX],last[MAX]; // 最先被访问的时间撮,结束访问的时间撮
#define CLR(arr,val) memset(arr,val,sizeof(arr))
typedef struct
{
char v[MAX];
vector<int> map[MAX];
int vNum; // 节点数量
int eNum; // 边的数量
}graph;
//顶点颜色表 color[u]
// 0 白色,未被访问过的节点标白色
// -1 灰色,已经被访问过一次的节点标灰色
// 1 黑色,已经被访问过了(它的后代也全部被访问过了)
void Create(graph *