数据结构 笔记:图的遍历(BFS)
时间复杂度的对比分析
MatrixGraph | ListGraph | |
addVertex | - | O(n) |
removeVertex | - | O(n^2) |
getVertex | O(1) | O(n) |
setVertex | O(1) | O(n) |
getAdjacent | O(n) | O(n) |
getEdge | O(1) | O(n) |
setEdge | O(1) | O(n) |
removeEdge | O(1) | O(n) |
vCount | O(1) | O(1) |
eCount | O(1) | O(n) |
ID | O(n) | O(n^2) |
OD | O(n) | O(n) |
小结论
-MatrixGraph使用于内存资源富足的场合(性能较好)
-ListGraph适用于内存资源受限的场合(节省空间)
图的遍历
-从图中的某一顶点触发,沿着一些边访问图中的其他顶点,使得每个顶点最多被访问一次
ps:从某个顶点出发进行遍历,不一定能够访问到图中的所有顶点
-广度优先(Breadth First Search)
·以二叉树层次遍历的思想对图进行遍历
-深度优先(Depth First Search)
·以二叉树先序遍历的思想对图进行遍历
广度优先算法
-原料:class LinkQueue<T>;
-步骤:
1.将其实顶点压入队列中
2.队头顶点v弹出,判断是否已经标记(标记:转2,为标记:转3)
3.标记顶点v,并将顶点v的邻接顶点压入队列中
4.判断队列是否为空(非空:转2,空:结束)
广度优先算法示列
template<typename T>DynamicArray<T>* toArray(LinkQueue<T>& queue){DynamicArray<T>* ret = new DynamicArray<T>(queue.length());if(ret != NULL){for(int i = 0;i<ret->length();i++,queue.remove()){ret->set(i,queue.front());}}else{//抛出异常}return ret;}SharedPointer<Array<int>> BFS(int i){DynamicArray<int>* ret = NULL;if( (0 <= i) && (i < vCount())){LinkQueue<int> q;LinkQueue<int> r;DynamicArray<bool> visited(vCount());for(int i = 0;i<visited.length();i++){visited[i] = false;}q.add(i);while(q.length() > 0){int v = q.front();q.remove();if(!visited[v]){SharedPointer<Array<int>> aj = getAdjacent(v);for(int j = 0;j<aj->length();j++){q.add((*aj)[j]);}r.add(v);visited[v] = true;}}ret = toArray(r);}else{//抛出异常}return ret;}
总结:
-MatrixGraph适用于资源富足的场合
-ListGraph适用于资源受限的场合
-广度优先按照“层次的方式”对顶点进行访问
-广度优先算法的核心是队列的使用
数据结构 笔记:图的遍历(BFS)相关推荐
- 大话数据结构笔记-图
大话数据结构笔记-图 定义 图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为 G(V,E), 其中 G表示一个图, V是图G中的顶点的集合, E是图G中边的集合. 顶点就是图中 ...
- 【数据结构】图的遍历(BFS和DFS)
图的遍历 图的遍历是指从图中的某一顶点出发,按照某种搜索方式沿着途中的边对图中所有顶点访问一次且仅访问一次.图的遍历主要有两种算法:广度优先搜索和深度优先搜索. 广度优先遍历BFS 广度优先遍历(BF ...
- 数据结构之图的遍历:广度优先遍历(BFS)
图的遍历:广度优先遍历 思维导图: 广度优先遍历的原理: 广度优先遍历的代码实现: 广度优先遍历的性能分析: 无权图单源最短路径问题: 广度优先生成树: 思维导图: 广度优先遍历的原理: 类似与树的层 ...
- 数据结构学习笔记——图的遍历算法(深度优先搜索和广度优先搜索)
目录 一.图的遍历概念 二.深度优先搜索(DFS) (一)DFS算法步骤 1.邻接表DFS算法步骤 2.邻接矩阵DFS算法步骤 (二)深度优先生成树.森林 (三)DFS的空间复杂度和时间复杂度 三.广 ...
- c++ 遍历list_数据结构之图的遍历,一篇文章get全部考点
图的概念 举个例子,假设你的微信朋友圈中有若干好友:张三.李四.王五.赵六.七大姑.八大姨. 而你七大姑的微信号里,又有若干好友:你.八大姨.Jack.Rose. 微信中,许许多多的用户组成了一个多对 ...
- 算法笔记 揭开广度优先遍历BFS的神秘面纱 HERODING的算法之路
揭开广度优先遍历BFS的神秘面纱 前言 1. 审题 1.1 树的BFS 1.2 图的BFS 2. 解法 2.1 树的BFS 2.2 图的BFS 3. 总结 前言 最近到了面试的高峰时期,前段时间也刷了 ...
- 数据结构之图的遍历:深度优先遍历(DFS)
图的遍历:深度优先遍历 思维导图: 深度优先遍历的原理: 深度优先遍历的代码实现: 深度优先遍历的性能: 深度优先生成树: 遍历与连通性的关系: 思维导图: 深度优先遍历的原理: ps: 实现方法是递 ...
- 图的遍历 BFS遍历(深学思维)
前言: 这篇文章还是是为了帮助一些 像我这样的菜鸟 找到简单的题解 问题描述: 马上到寒假了,JXY准备去n大城市游玩.这些城市之间有些有航线,有些没有.由于JXY特别懒,现在他想请一个更蒟蒻的人AY ...
- LeetCode 547. 朋友圈(图的遍历BFS DFS)
文章目录 1. 题目 2. 解题 2.1 BFS 广度优先 2.2 DFS 深度优先 1. 题目 问有几个连通网络 2. 解题 2.1 BFS 广度优先 参考图的数据结构 class Solution ...
- 【数据结构笔记21】图的遍历,DFS与BFS,连通图
本次笔记内容: 6.2.1 图的遍历 - DFS 6.2.2 图的遍历 - BFS 6.2.3 图的遍历 - 为什么需要两种遍历 6.2.4 图的遍历 - 图连不通怎么办? 文章目录 深度优先搜索(D ...
最新文章
- 开发者转型AI看过来,这是一场汇聚中美顶尖专家的AI盛会
- 服务器光信号闪红灯是什么意思,路由器光信号闪红灯是什么意思
- 文献管理工具mendeley登录问题
- 鸿蒙系统董事长,鸿蒙2.0已开源 华为轮值董事长:今年至少3亿设备搭载鸿蒙系统...
- 系统架构的演变 -----自 罗文浩
- 网络七层协议 五层模型 TCP连接 HTTP连接 socket套接字
- 【20090702-03】ArcEngine的类库介绍(转)
- 小程序页面之间的跳转方法
- 图像语义分割(15)-ConvCRFs:用于语义分割的卷积条件随机场
- 十一种值得女生交往的男生
- 八人抢答器讲解_八人竞赛抢答器需求分析
- 矩阵乘法,输出结果矩阵
- 基于SpringBoot微信公众号的开发
- Python实现淘宝准点抢单!双十一秒杀神器啊!还不来学?
- bat 批处理查看局域网闲置ip(ping或Arp列表结合)
- 木讷的程序员需要知道的事情 (七)
- JAVA之线程子类秒表(静态)
- 产业分析:线上线下融合会展
- 装机必备软件测试面试题,装机必备软件兼容性测试
- 《Adobe InDesign CS5中文版经典教程》—第1课1.2节工作区简介