//深度優先搜尋
#include<stdio.h>
#include<malloc.h>
int n;
struct adj_list
{
int v;
//char data;
struct adj_list *next;
};
typedef struct adj_list NODE;
NODE node[100];
//int pren[100];
//int postn[100];
int tra[100];
void dfs (int v,NODE node[],int n,bool b[],int tra[],int &count)
{
NODE *p;
b[v]=1;tra[count++]=v;
//pren[v]=++prefdn;
p=node[v].next;
while(p!=NULL)
{
if(!b[p->v])
dfs(p->v,node,n,b,tra,count);
p=p->next;
}
}
void traver_dfs(NODE node[],int n,int tra[])
{
int i,count;
bool *b=new bool[n];
count=0;
for(i=0;i<n;i++)
b[i]=0;
for(i=0;i<n;i++)
if(!b[i])
dfs(i,node,n,b,tra,count);
delete b;
}
int main()
{
int r,j,k,i;
NODE *q,*pre;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
node[i].next=NULL;
pre=&node[i];
scanf("%d",&k);
for(j=0;j<k;j++)
{
scanf("%d",&r);
q=(NODE *)malloc(sizeof(NODE));
q->v=r;
q->next=pre->next;
pre->next=q;
pre=q;
}
}
traver_dfs(node,n,tra);
printf("深度優先搜尋的結果:/n");
for(i=0;i<n;i++)
printf("%d ",tra[i]);
printf("/n");
}
}
/*
6
3
1 2 3
3
0 4 5
2
0 3
3
0 2 4
3
1 3 5
2
1 4
深度優先搜尋的結果:
0 1 4 3 2 5
*/