图的遍历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

深度优先生成树

深度优先生成森林

图的遍历与图的连通性

原文地址:https://www.cnblogs.com/jev-0987/p/13213434.html