基本思想:访问顶点v0,然后访问v0邻接的未访问过的顶点v1,再从v1出发递归的按照深度优先的方式遍历。当遇到一个所有邻接于它的顶点都被访问过的顶点u时,则回到顶点序列中最后一个拥有未被访问过的相邻节点的顶点W,从W继续出发。最终当任何已被访问过的节点都没有未被访问的节点时,遍历结束。
bool visited[maxn]={0};
void DFS(int x)
{
visited[x]=true;
printf("%d\n",x);
int i;
for(i=head[x];i!=-1;i=edge[i].next)
{
if(!visited[i].to)
{
DFS(edge[i].to);
}
}
}