Day10 图的深度优先遍历
图的深度优先遍历是另一种对图的遍历方式,如下中的图里,深度优先遍历的序列为:
A->B->F->C->D->E
即每次优先访问当前节点的邻接点。
dfs用递归表示代码很简单需要分成两个函数进行,dfstravel函数对顶点数组中未被访问过的节点依次执行dfs函数,在dfs函数中,首先对当前传入的节点遍历,再对未被遍历过的其为弧尾的弧的弧头递归调用dfs函数,类似树的先序遍历。
代码如下:
void DFS(Graph G, int v) {
if (visited[v] == false) {
visited[v] = true;
cout << G.vexlist[v].name<< ' ';
}
edgeNode *w;
for (w = G.vexlist[v].firstedge; w != NULL; w = w->nextEdge) {
if (visited[w->head] == false) {
DFS(G, w->head);
}
}
}
void DFStravel(Graph G){
for (int i = 1; i <= G.vexNum; i++)
visited[i] = false;
DFS(G, 1);
for (int i = 1; i <= G.vexNum; i++) {
if (visited[i] == false) {
DFS(G, i);
}
}
}