有向图才会有forward edge和cross edge。无向图是没有这两种edge的。
void dfs(int u) {
vis[u] = 1;
for(int &v : G[u]) {
switch(vis[v]) {
case 0:
// tree edge
vis[v] = 1;
dfs(v);
break;
case 1:
// backward edge
break;
case 2:
// forward edge or cross edge
break;
}
}
vis[u] = 2;
}