#include
#include
struct edge
{
int destin;
struct edge * edgeptr;
};
struct graph
{
int reach[6];
int nodeno[6];
char data[6];
int dfn[6] ;
struct edge *listptr[6];
};
void main()
{
struct graph g1;
void dfs(struct graph *,int,int *);
int i,j;
static int adj[6][4]={{2,4,-1,-1},{2,5,-1,-1},{0,1,3,5},
{2,4,-1,-1},{0,3,-1,-1},{1,2,-1,-1}};
struct edge *p,*q;
for(i=0;i<6;i++)
{
g1.reach[i]=0;
g1.nodeno[i]=i;
g1.data[i]='A'+i;
}
for(i=0;i<6;i++)
for(j=0;j<4;j++)
if (adj [i] [j] !=-1)
{
q=(struct edge *)malloc(sizeof(struct edge));
q->destin=adj[i][j];
q->edgeptr=NULL;
if (j==0)
g1.listptr[i]=p=q;
else
{
p->edgeptr=q;
p=q;
}
}
dfs(&g1,0,0);
for(i=0;i<6;i++)
printf ("%c\t%d\n",g1.data[i] ,g1.dfn[i]);
getch();
}
void dfs(struct graph *g,int index,int *count)
{
struct edge *link;
*count=*count+1;
g->dfn[index]=*count;
g->reach[index]=1;
link=g->listptr[index];
while(link!=NULL)
{
if(!(g->reach[link->destin]))
dfs(g,link->destin,count);
link=link->edgeptr;
}
}
No comments:
Post a Comment