与广度优先搜索不同,深度优先搜索DFS类似于树的先序遍历。
伪代码如下:
bool visited[MAX_NUM]; //访问标记数组
void DFS_Traverse(Graph G)
{
for(v=0; v<G.vex_num; ++v)
visited[v] = false;
for(v=0; v<G.vex_num; ++v)
{
if(visised[v] == false)
DFS(G, v); //防止漏掉非连通图
}
}
void DFS(Graph G, int v)
{
visit(v);
visited[v] = true;
for(w=FirstNeighbor(G, v); w>=0; w=NextNeighbor(G, v, w))
{
if(visited[w] == false)
DFS(G, w);
}