考研天勤 数据结构 图(自用回顾)
考研天勤 数据结构 图的算法
- 两种特殊的存储结构十字表与邻接多重表
- 十字表(有向图)
- 邻接多重表(无向图)
- 生成树算法
- Prim算法(选点)
- Kruskal算法(选边)
- 最短路径
- 迪杰斯特拉算法(单源)O(n²)
- Floy算法(多源最短路径)O(n^3)
- 遍历
- DFS
- BFS
- 拓扑排序
- 普通拓扑
- 逆拓扑
- 拓扑排序的应用 关键路径
- 图的判环
- 判断连通分量(图的连通性)
两种特殊的存储结构十字表与邻接多重表
顶点存数据和第一个边的指针,边存练连的顶点和两个端点的兄弟边(即下一条边)
十字表(有向图)
节点和边分开存
顶点:数据 第一个入边指针 第一个出边指针
边:尾点 头点 同头兄弟边指针 同尾兄弟边指针 边的信息
邻接多重表(无向图)
节点和边分开存
节点:数据 第一个边
边:Mark标记 i节点 i连的边 j节点 j连的边 边的信息
生成树算法
Prim算法(选点)
初始化:vis数组与dist数组,初始化的时候已经放入了第一个点,所以第一层循环是进行n-1次循环,如果发现选出的点的距离是无穷大则说明此连通分量已经找完,跳出算法(本代码没有实现)
Kruskal算法(选边)
每次从图中选出一个最小的边放进生成树中,加入时不能让生成树成为环,用并查集的方式,如果要加入的边的两个顶点有共同的祖先,则不加入此边,若边符合条件,则加入后应进行并查集合并,合并公共祖先。
初始化:因为每个边的长度不会再改变,所以初始化时进行一次边排序就行了。初始化并查集数组,每个节点祖先设为自己。
有并查集判环,就没用vis数组记录是否访问过,因为对象是边
最短路径
迪杰斯特拉算法(单源)O(n²)
从图中每次选一个离最初节点最近的顶点(和Prim算法的区别),然后加入点后,看这个点有没有影响剩下的点到源点的距离并更新(Prim是观察的这个新加入的顶点和剩下的点,不是到源点)
注意:记录路径是在选完新加入的节点后,更新了剩下的节点的dist后再记录。
初始化:dist数组为到源点的边的长度,vis数组,dist数组中源点设为1,path数组与源点相连的顶点记录path为源点
Floy算法(多源最短路径)O(n^3)
把每个节点作为中间节点,然后对i和j这一怼顶点进行更新,看它的引入能否使i和j距离更短。如果更短,就把中间点设为path[i][j]。
递归追踪path,-1说明这两点之间没有中间点了,就是最短路径
初始化:path全为-1,邻接矩阵
遍历
DFS
递归是对此顶点的每个孩子进行dfs
BFS
拓扑排序
普通拓扑
选取没有
用一个数组记录每个顶点的入度,选取入度为0的节点,然后更新与这个顶点相邻的顶点的度。拓扑排序用栈实现,把选的点放进栈里。while(不空)
逆拓扑
使用DFS递归即可,把print放在最后,因为使用DFS遍历的最后一个一定是没有子节点的,所以逆拓扑
拓扑排序的应用 关键路径
关键路径是弹性时间为0的活动组成的路径
图的判环
①拓扑排序判环:如果最后输出的节点数小于总节点数,则说明有环。
判断连通分量(图的连通性)
无向图用一次dfs或者bfs,有向图用两次,一次正向,第二次逆置边后在dfs/bfs。
(图片来自天勤数据结构)
考研天勤 数据结构 图(自用回顾)相关推荐
- 408 | 【2014年】计算机统考真题 自用回顾知识点整理
选择题 T3:循环队列 不同指针指向,队列判空/判满条件 1. rear:指向队尾元素 front:指向队头元素前一个位置 (1)牺牲一个存储空间 (2)判空条件:front == r ...
- 考研计算机874数据结构知识整理 Apare_xzc
考研计算机874数据结构知识整理Apare_xzc for zcy勇哥 2020.11.17 一.题目类型 10道填空题 4道综合题 2道算法题(出自历年期末考试,主要考链表和二叉树) 二.综合题的考 ...
- 20.0、C语言数据结构——图的存储结构
20.0.C语言数据结构--图的存储结构 图的存储结构相比较线性表与树来说就复杂很多了: 1. 我们回顾下,对于线性表来说,是一对一的关系,所以用数组或者链表均可简单存放:树结构是一对多的关系,所以我 ...
- 841南昌大学计算机考研,2020考研南昌大学841数据结构试题特点分析
2020考研初试已正式开始,中公考研网初试后为大家整理发布"2020考研南昌大学841数据结构试题特点分析"考研试题内容,中公考研各科研究院老师将对2020考研试题进行试题变化及难 ...
- 数据结构(c语言版)笔记6,2020考研计算机《数据结构(C语言版)》复习笔记(6)
2020年计算机考研复习已经开始,新东方在线在此整理了2020考研计算机<数据结构(C语言版)>复习笔记(6),希望能帮助大家! 第六章 树知识点整理 树是n个结点的有限集合,非空时必须满 ...
- 数据结构--图(Graph)详解(四)
数据结构–图(Graph)详解(四) 文章目录 数据结构--图(Graph)详解(四) 一.图中几个NB的算法 1.普里姆算法(Prim算法)求最小生成树 2.克鲁斯卡尔算法(Kruskal算法)求最 ...
- 数据结构--图(Graph)详解(三)
数据结构–图(Graph)详解(三) 文章目录 数据结构--图(Graph)详解(三) 一.深度优先生成树和广度优先生成树 1.铺垫 2.非连通图的生成森林 3.深度优先生成森林 4.广度优先生成森林 ...
- 数据结构--图(Graph)详解(二)
数据结构–图(Graph)详解(二) 文章目录 数据结构--图(Graph)详解(二) 一.图的存储结构 1.图的顺序存储法 2.图的邻接表存储法 3.图的十字链表存储法 4.图的邻接多重表存储法 二 ...
- 数据结构--图(Graph)详解(一)
数据结构–图(Graph)详解(一) 文章目录 数据结构--图(Graph)详解(一) 一.图的基本概念 1.图的分类 2.弧头和弧尾 3.入度和出度 4.(V1,V2) 和 < V1,V2 & ...
- 数据结构数组计算机中的应用,2018考研计算机:数据结构数组和广义表复习重点...
2018考研计算机:数据结构数组和广义表复习重点 2017-08-17 16:00 | 考研集训营 <数据结构(C语言版)>复习重点在二.三.六.七.九.十章,考试内容两大类:概念,算法, ...
最新文章
- 模式窗口window.open造成Session丢失的解决方法
- 张小龙宣布微信小程序可直接从桌面进入
- C#中的类02:构造对象
- Java 位运算- 十进制数值转十六进制(内存中的数据)
- java四类八种基本数据类型
- 用winformz时间格式不正确_煮八爪鱼,有人用冷水,有人用开水,大厨:都不对,教你正确做法...
- 在不确定的世界,如何应对风险
- NetCore EF Code Frist
- QBC检索和本地SQL检索
- Javascript特效:音乐导航
- Python文档学习笔记(1)--使用Python 解释器
- data layui table 排序_具有排序、筛选、分组、虚拟化、编辑功能的React表格组件...
- jquery遍历的radio的取值问题
- 老罗锤子手机公布会,我感到深深地愧疚
- POJ-Bound Found | 尺取法+绝对值特性
- MBA-day21 假言推理-练习题
- Tomcat IP访问限制
- windows10专业版 docker desktop 安装失败
- 没错,这就是九大爷平台1225车品狂欢节预告!
- 我的世界空岛生存服务器制作,我的世界1.7.10羽逸之光空岛生存服务器
热门文章
- 易 捷文件共享Web服务器破解,局域网临时一键搭建网站或共享文件
- bodymovin导出没有html5,AE脚本-导出json格式的Web动画工具 Bodymovin v5.5.3+使用教程
- 基于JQUERY的WEB在线流程图设计器GOOFLOW 0.5版
- 数据库变为可疑_SQL SERVER 数据库被标记为“可疑”的解决办法
- linux tar压缩文件命令,tar打包压缩文件命令
- GB-T2260-2020 <中华人民共和国县以上行政区划代码>
- 使用IDEA回退SVN到某个历史版本
- 软件测试之编写测试用例
- 【Android 应用开发】GitHub 优秀的 Android 开源项目
- AD20使用之用封装创建向导创建封装