#include<stdio.h>
#define N 8
1,0,0,0,0,0,0,0,
0,1,0,0,0,1,0,0,
0,0,1,0,0,1,0,0,
0,0,0,0,0,0,1,1,
1,0,0,0,0,0,0,0,
0,0,0,1,0,1,0,0,
0,0,0,0,1,0,1,0};
/*0-7对应节点为x,y,z,s,t,v,u*/
/*假定(u,v)是边*//*tree edge: v 是通过边第一次发现*/
/*back edge: v是u的祖先*/
/*Forward edge:v是u的后代且边不是tree edge*/
/*cross edge:以上三种边之外的边*/
int tag = 1;
int pre[N];
int post[N];
void dfstag(int cur)
{
pre[cur]=tag++;
int i;
for(i=0;i<N;i++)
if(1==edge[cur][i])
{
if(pre[i]==0){
printf("%d,%d:tree edge\n",cur, i);//该节点第一次访问
dfstag(i);
}else {
if(post[i]==0){
printf("%d,%d:back edge\n",cur, i);//该节点已访问过,但对其邻接点还未访问完
}else if(pre[i]>pre[cur]){
printf("%d,%d:forward edge\n",cur, i);
}else{
printf("%d,%d:cross edge\n",cur,i);
}
}
}
post[cur]=tag++;
}
int main()
{
int i;
for(i=0;i<N;i++)
{
pre[i]=0;
post[i]=0;
}
dfstag(3);//从s节点开始遍历
return 0;
}