1 int edge[V][V], pre[V], post[V], tag;
2 void dfstag(int cur, int n) { // vertex: 0 ~ n-1
3 pre[cur] = ++tag;
4 for (int i = 0; i < n; ++i)
5 if (edge[cur][i]) {
6 if (0 == pre[i]) {
7 cout<<"cur: "<<cur<<"i: "<<i;
8 printf("Tree Edge!\n");//代表深度优先搜索树中的边
9 dfstag(i, n);
10 } else {
11 if (0 == post[i]){
12 cout<<"cur: "<<cur<<"i: "<<i;
13 printf("Back Edge!\n");//回边:在生成的深度优先搜索树中,在探测<v,w>时,发现w是v的祖先
14 }else if (pre[i] > pre[cur]){
15 cout<<"cur: "<<cur<<"i: "<<i;
16 printf("Down Edge!\n");//前向边:在生成的深度优先搜索树中,在探测<v,w>时,发现w是v的孩子
17 }
18 else{
19 cout<<"cur: "<<cur<<"i: "<<i;
20 printf("Cross Edge!\n");//横跨边:其余的所有边
21
22 }
23 }
24 }
25 post[cur] = ++tag;
26 }