图的深度优先搜索
深度优先搜索与一般树遍历之间的差别在于需要明确防止访问已访问过的节点。实际上,如果图为一棵树,则从根开始的深度优先搜索等价于先序遍历。
void traverse(int k, void (*visit)(int))

...{
link t;
(*visit)(k);
visited[k] = 1;
for(t = adj[k]; t != NULL; t = t->next)
if(!visited[t->v]) traverse(t->v, visit);
}
图的广度优先搜索
图的广度优先搜索类似于树的层序遍历
void traverse(int k, void (*visit)(int))

...{
link t;
QUEUEinit(V);
QUEUEput(k);
while(!QUEUEempty())

...{
if(visited[k=QUEUEput()] == 0)

...{
(*visit)(k);
visited[k] = 1;
for(t = adj[k]; t != NULL; t = t->next)
if(visited[t->v] == 0)
QUEUEput(t->v);
}
}
}
深度优先搜索与一般树遍历之间的差别在于需要明确防止访问已访问过的节点。实际上,如果图为一棵树,则从根开始的深度优先搜索等价于先序遍历。









图的广度优先搜索
图的广度优先搜索类似于树的层序遍历



















