·首先访问起始顶点v;
·接着由v出发访问v的任意一个邻接且未被访问的邻接顶点w,;
·然后再访问与w,邻接且未被访问的任意顶点yi;
·若w,没有邻接且未被访问的顶点时,退回到它的上一层顶点v;
·重复上述过程,直到所有顶点被访问为止。
bool visited[MAX_TREE_SIZE];
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])
DES(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])
DES(G, w);
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/954d872af133ba0167c02566f6cb2378.png#pic_center)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3f62db6d9932147708ceabc173e1c175.png#pic_center)
在深度遍历过程中,我们可以得到一棵遍历树,称为深度优先生成树(生成森林)。 |
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e57eed9ab10dd1cff99657e71d16248e.png#pic_center)
在无向图当中,在任意结点出发进行一次遍历(调用一次BFS或DFS),若能访问全部结点,说明该无向图是连通的。 |
在无向图中,调用遍历函数(BFS或DFS)的次数为连通分量的个数。 |
·