| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 数据结构与算法 -> 算法与数据结构 --- 图 --- 图的遍历 -> 正文阅读 |
|
|
[数据结构与算法]算法与数据结构 --- 图 --- 图的遍历 |
第一部分 --- 深度优先搜索遍历思想(DFS)
为了避免顶点被重复访问,我们给每一个被访问过的顶点打上标记(打上标记的方法就是使用辅助数组,如上) 深度优先搜索可以理解为一条道走到黑 1.深度优先遍历:一条道走到黑,走完之后回退看看有没有别的路可走,如果有的话继续走,直到所有的路都被走完为止 1.深度优先遍历的顺序有很多种,到底是那一种遍历顺序则取决于我们选择了那些邻接点 2.从V1遍历到V5后我们发现没有V5的邻接点给我们遍历了,于是我们就开始了回退,回退到V4发现还是没有,继续回退到V3,V2...一直到V1发现有邻接点给我们遍历,我们就继续遍历,就这样直到将图中所有的顶点都遍历一遍为止
1.用邻接矩阵来实现深度优先遍历的时候,除了需要准备图的邻接矩阵外我们还需要准备一个辅助数组来标记图中的顶点是否被遍历(辅助数组的大小等于图中顶点的个数,然后数组中的每一个元素都对应着一个顶点) 2.整个的遍历过程是: 一.选择一个顶点作为遍历起点(一个顶点作为遍历起点后就会被遍历,所以我们需要将这个顶点在辅助数组中标记为被访问(一般数组中顶点对应位置存放1的时候为顶点被访问过,为0的时候则是没被访问)) 二.在邻接矩阵中找到起始顶点所在的行,选择任意一个与顶点具有边关系(邻接关系)的点进行遍历(选择了顶点后,也要将被选择的顶点在辅助数组中的对应位置的元素由0改为1) 三.以被选择的顶点作为新的起点重复第二步(深度优先搜索 四.在执行第三步的时候如果被选择的顶点已经没有了没被访问过的邻接顶点的话(通过辅助数组来判断),我们就进行顶点回退,回退被选择的顶点的上一个顶点看看他有没有没被访问过的邻接顶点,如果没有继续回退(回退的终止条件是辅助数组中的所有元素都为1),如果有的话就执行第三步
我去用递归表示真的简洁啊,一个递归就同时包含了前进和回退 如果有没被访问过的邻接结点,那就一直前进访问去到下一层递归,如果没有没被访问过的邻接结点的话则这一层递归结束,回到上一层(此时就相当于在执行回退操作),回退之后继续循环找找有没有没被访问的邻接顶点,如果没有则这一层递归也结束,继续回退,如果有的话就前进访问,进入到下一层递归中,就这样不停的前进和回退,直到辅助数组中的所有元素都为1(图中所有顶点都被访问过)为止
? 非连通图的深度优先遍历方式就是:一个连通分量遍历完后,再遍历另一个连通分量,直到将所有的连通分量都遍历完为止 第二部分 --- 广度优先搜索思想(BFS)
|
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/23 4:47:58- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |