vlambda博客
学习文章列表

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); } }
}