图的遍历DFS

时间:2020-06-30 14:54:31   收藏:0   阅读:16

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

深度优先生成树

技术图片

技术图片

深度优先生成森林

技术图片

技术图片

图的遍历与图的连通性

技术图片

技术图片

技术图片

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!