博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图的遍历之深度优先搜索(DFS)
阅读量:5052 次
发布时间:2019-06-12

本文共 1056 字,大约阅读时间需要 3 分钟。

1、深度优先遍历的过程

深度优先遍历类似于树的先序遍历,是树的先序遍历的推广。

对于一个连通图,深度优先搜索遍历的过程如下。

(1)从图中某个顶点v出发1,访问v。

(2)找到刚访问过的顶点的第一个未被访问过的邻接点,访问该顶点。以该顶点为新顶点,重

复此步骤,直到刚访问过的顶点没有未被访问的邻接点为止。

(3)返回前一个访问过的且仍有未被访问的邻接点的顶点,找出该顶点的下一个未被访问的

邻接点,访问该顶点。

(4)重复步骤(2)和(3)直到途中所有顶点都被访问过,搜索结束。

2.深度优先遍历的算法实现

显然,深度优先搜索遍历连通图是一个递归的过程。为了在遍历过程中便于区分顶点是否已

被访问,需要附设访问表标志数组visited[n],其初值为“false”,一旦某个顶点被访问,则其相

应的分量置为“true”。

算法描述

bool visited[MVNum]      //访问标准数组,其初值为“false”void DFS (Graph G,int v){
//从第v个顶点出发递归地深度优先遍历图G cout<
=0;w=NextAdjVex(G,v,w)) /*依次检查v的所有邻接点w,FirstAdjVex(G,v,w)表示v的第一个邻 接点;NextAdjVex(G,v,w)表示v相对于w的下一个邻接点,w>= 0表示存在邻接点*/ if(!visited[w]) DFS(G,w);//对v的尚未访问的邻接顶点w递归调用DFS}

根据存储结构的不同,具体可以分为:

       ①采用邻接矩阵表示图的深度优先搜索遍历

void DFS—AM(AMGraph G, int v)    {
//G为邻接矩阵类型,从第v个顶点出发深度优先搜索遍历图G cout<

      ②采用邻接表表示图的深度优先搜索遍历

void DFS_AL(ALGraph G,int v){
//图G为邻接表类型 cout<
adjvex; //表示w是v的邻接点 if(!visited[w]) DFS_AL(G,w);//如果w未访问,递归 p=p->nextarc;// p指向下一个边结点3 }}

谢谢阅读QAQ

转载于:https://www.cnblogs.com/Knight-Dark-The/p/11057013.html

你可能感兴趣的文章
HDU 1028 Ignatius and the Princess III(母函数)
查看>>
(转)面向对象最核心的机制——动态绑定(多态)
查看>>
token简单的使用流程。
查看>>
django创建项目流程
查看>>
Vue 框架-01- 入门篇 图文教程
查看>>
多变量微积分笔记24——空间线积分
查看>>
poi操作oracle数据库导出excel文件
查看>>
(转)Intent的基本使用方法总结
查看>>
Windows Phone开发(24):启动器与选择器之发送短信
查看>>
JS截取字符串常用方法
查看>>
Google非官方的Text To Speech和Speech Recognition的API
查看>>
stdext - A C++ STL Extensions Libary
查看>>
Django 内建 中间件组件
查看>>
bootstrap-Table服务端分页,获取到的数据怎么再页面的表格里显示
查看>>
进程间通信系列 之 socket套接字及其实例
查看>>
天气预报插件
查看>>
Unity 游戏框架搭建 (十三) 无需继承的单例的模板
查看>>
模块与包
查看>>
mysql忘记root密码
查看>>
apache服务器中设置目录不可访问
查看>>