深度优先搜索类似于树的先序遍历
**
- 首先访问起始顶点v
- 接着由v出发访问v的任意一个邻接且未被访问的邻接顶点w;
- 然后再访问与w邻接且未被访问的任意顶点y;
- 若w没有邻接且未被访问的顶点时,退回到它的上一层顶点v;
- 重复上述过程,直到所有顶点被访问为止;
**
递归+标记数组
bool visited[max];
void DFSTraverse(Graph G) {
for (int i = 0; i < G.vexnum; i++) {
visited[i] = false;
}
for (int i = 0; i < G.vexnum; i++) {
if (!visited[i]) DFS(G, i);
}
}
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]) DFS(G, w);
}
}