图的遍历DFS
Posted jev-0987
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图的遍历DFS相关的知识,希望对你有一定的参考价值。
图的遍历DFS
与树的深度优先遍历之间的联系
树的深度优先遍历分为:先根,后根
//树的先根遍历
void PreOrder(TreeNode *R){
if(R!=NULL){
visit(R); //访问根节点
while(R还有下一个子树T)
PreOrder(T); //先根遍历下一棵子树
}
}
新找到的相邻结点一定是没有访问过的。
先根遍历序列:1,2,5,6,3,4,7,8
图的深度优先遍历
bool visited[MAX_VERTEX_NUM]; //初始值都为false
void DFSTraverse(Graph G){ //对图G进行深度优先遍历
for(v=0;v<G.vexnum;++v)
visited[v]=FASLSE; //初始化已访问标记数据
for(v=0;v<G.vexnum;++v) //本代码中是从v=0开始遍历
if(!visited[v])
DFS(G,v);
}
void DFS(Graph G,int v){ //从顶点v出发,深度优先遍历图G
visit(v); //访问顶点v
visited[v] = TURE; //设已访问标记
for(w=FirstNeighbor(G,v);w>=0;w=NextNeighor(G,v,w))
if(!visited[w]){ //w为u的尚未访问的邻接顶点
DFS(G,w);
}
}
复杂度分析
深度优先遍历序列
从1开始出发:12634785
邻接表不同得到的序列也不同:
从3出发:36215784
从1出发:12678435
深度优先生成树
深度优先生成森林
图的遍历与图的连通性
以上是关于图的遍历DFS的主要内容,如果未能解决你的问题,请参考以下文章