考研天勤 数据结构 图的算法

  • 两种特殊的存储结构十字表与邻接多重表
    • 十字表(有向图)
    • 邻接多重表(无向图)
  • 生成树算法
    • 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。

(图片来自天勤数据结构)

考研天勤 数据结构 图(自用回顾)相关推荐

  1. 408 | 【2014年】计算机统考真题 自用回顾知识点整理

    选择题 T3:循环队列 不同指针指向,队列判空/判满条件 1. rear:指向队尾元素 front:指向队头元素前一个位置     (1)牺牲一个存储空间     (2)判空条件:front == r ...

  2. 考研计算机874数据结构知识整理 Apare_xzc

    考研计算机874数据结构知识整理Apare_xzc for zcy勇哥 2020.11.17 一.题目类型 10道填空题 4道综合题 2道算法题(出自历年期末考试,主要考链表和二叉树) 二.综合题的考 ...

  3. 20.0、C语言数据结构——图的存储结构

    20.0.C语言数据结构--图的存储结构 图的存储结构相比较线性表与树来说就复杂很多了: 1. 我们回顾下,对于线性表来说,是一对一的关系,所以用数组或者链表均可简单存放:树结构是一对多的关系,所以我 ...

  4. 841南昌大学计算机考研,2020考研南昌大学841数据结构试题特点分析

    2020考研初试已正式开始,中公考研网初试后为大家整理发布"2020考研南昌大学841数据结构试题特点分析"考研试题内容,中公考研各科研究院老师将对2020考研试题进行试题变化及难 ...

  5. 数据结构(c语言版)笔记6,2020考研计算机《数据结构(C语言版)》复习笔记(6)

    2020年计算机考研复习已经开始,新东方在线在此整理了2020考研计算机<数据结构(C语言版)>复习笔记(6),希望能帮助大家! 第六章 树知识点整理 树是n个结点的有限集合,非空时必须满 ...

  6. 数据结构--图(Graph)详解(四)

    数据结构–图(Graph)详解(四) 文章目录 数据结构--图(Graph)详解(四) 一.图中几个NB的算法 1.普里姆算法(Prim算法)求最小生成树 2.克鲁斯卡尔算法(Kruskal算法)求最 ...

  7. 数据结构--图(Graph)详解(三)

    数据结构–图(Graph)详解(三) 文章目录 数据结构--图(Graph)详解(三) 一.深度优先生成树和广度优先生成树 1.铺垫 2.非连通图的生成森林 3.深度优先生成森林 4.广度优先生成森林 ...

  8. 数据结构--图(Graph)详解(二)

    数据结构–图(Graph)详解(二) 文章目录 数据结构--图(Graph)详解(二) 一.图的存储结构 1.图的顺序存储法 2.图的邻接表存储法 3.图的十字链表存储法 4.图的邻接多重表存储法 二 ...

  9. 数据结构--图(Graph)详解(一)

    数据结构–图(Graph)详解(一) 文章目录 数据结构--图(Graph)详解(一) 一.图的基本概念 1.图的分类 2.弧头和弧尾 3.入度和出度 4.(V1,V2) 和 < V1,V2 & ...

  10. 数据结构数组计算机中的应用,2018考研计算机:数据结构数组和广义表复习重点...

    2018考研计算机:数据结构数组和广义表复习重点 2017-08-17 16:00 | 考研集训营 <数据结构(C语言版)>复习重点在二.三.六.七.九.十章,考试内容两大类:概念,算法, ...

最新文章

  1. 模式窗口window.open造成Session丢失的解决方法
  2. 张小龙宣布微信小程序可直接从桌面进入
  3. C#中的类02:构造对象
  4. Java 位运算- 十进制数值转十六进制(内存中的数据)
  5. java四类八种基本数据类型
  6. 用winformz时间格式不正确_煮八爪鱼,有人用冷水,有人用开水,大厨:都不对,教你正确做法...
  7. 在不确定的世界,如何应对风险
  8. NetCore EF Code Frist
  9. QBC检索和本地SQL检索
  10. Javascript特效:音乐导航
  11. Python文档学习笔记(1)--使用Python 解释器
  12. data layui table 排序_具有排序、筛选、分组、虚拟化、编辑功能的React表格组件...
  13. jquery遍历的radio的取值问题
  14. 老罗锤子手机公布会,我感到深深地愧疚
  15. POJ-Bound Found | 尺取法+绝对值特性
  16. MBA-day21 假言推理-练习题
  17. Tomcat IP访问限制
  18. windows10专业版 docker desktop 安装失败
  19. 没错,这就是九大爷平台1225车品狂欢节预告!
  20. 我的世界空岛生存服务器制作,我的世界1.7.10羽逸之光空岛生存服务器

热门文章

  1. 易 捷文件共享Web服务器破解,局域网临时一键搭建网站或共享文件
  2. bodymovin导出没有html5,AE脚本-导出json格式的Web动画工具 Bodymovin v5.5.3+使用教程
  3. 基于JQUERY的WEB在线流程图设计器GOOFLOW 0.5版
  4. 数据库变为可疑_SQL SERVER 数据库被标记为“可疑”的解决办法
  5. linux tar压缩文件命令,tar打包压缩文件命令
  6. GB-T2260-2020 <中华人民共和国县以上行政区划代码>
  7. 使用IDEA回退SVN到某个历史版本
  8. 软件测试之编写测试用例
  9. 【Android 应用开发】GitHub 优秀的 Android 开源项目
  10. AD20使用之用封装创建向导创建封装