• 数据结构学习笔记(VI):图


    目录

    1 图的基本概念

    6.1 图的基本概念

    1.定义

    2.边 

    3.连通 

    4.子图

    5.连通分量  

    6. 生成树与森林

    7.权

    8.特殊的图

    2 图的存储

    2.1 邻接矩阵法

    1.实现

    2.性能分析

    3.性质

    2.2 邻接表法

    1.实现

    2.对比

    2.3 十字链表与邻接多重表

    1.十字链表存储有向图

    2.邻接多重表存储无向图

    2.4 图的基本操作

    3 图的遍历

    3.1 广度优先遍历(BFS)

    1.思路

    2.实现

    3.分析

    3.2 深度优先遍历

    1.实现

    2.分析

    4 最短路径问题

    4.1 最小生成树

    1.定义

    2.Prim算法 

    3.Kruskal算法

    4.2 BFS算法

    4.3 Dijkstra算法

    4.4 Floyd算法

    4.5 有向无环图描述表达式

    1.定义

    2.解题方法

    4.6 拓扑排序

    1.定义

    2.实现

    3.逆拓扑排序

    4.7 关键路径

    1.AOE网

    2.求关键路径步骤


    1 图的基本概念

    6.1 图的基本概念

    1.定义

    2.边 

    对于无向图:顶点v的度是指依附于该顶点的边的条数,记为TD(v) 

    对于有向图:入度是以顶点v为终点的有向边的数目,记为ID(v);出度是以顶点v为起点的有向边的数目,记为OD(v);顶点v的度等于其入度和出度之和,即TD(v)= ID(v)+OD(v)

    路径――顶点vp到顶点vq之间的一条路径是指顶点序列

    简单路径――在路径序列中,顶点不重复出现的路径称为简单路径

    简单回路――除第一个顶点和最后一个顶点外,其余顶点不重复出现的回路称为简单回路

    路径长度――路径上边的数目

    点到点的距离――从顶点u出发到顶点v的最短路存若存在,则此路径的长度称为从u到v的距离。若从u到v根本不存在路径,则记该距离为无穷

    无向图中,若从顶点v到顶点w有路径存在,则称v和w是连通的

    有向图中,若从顶点v到顶点w和从顶点w到顶点v之间都有路径,则称这两个顶点是强连通的

    3.连通 

    4.子图

    5.连通分量  

    无向图中的极大连通子图称为连通分量;有向图中的极大强连通子图称为有向图的强连通分量

    6. 生成树与森林

    连通图的生成树是包含图中全部顶点的一个极小连通子图;在非连通图中,连通分量的生成树构成了非连通图的生成森林。

    7.权

    边的权――在一个图中,每条边都可以标上具有某种含义的数值,该数值称为该边的权值。

    带权图/网――边上带有权值的图称为带权图,也称网。

    带权路径长度――当图是带权图时,一条路径上所有边的权值之和!称为该路径的带权路径长度

    8.特殊的图

    2 图的存储

    2.1 邻接矩阵法

    1.实现

    2.性能分析

    3.性质

    2.2 邻接表法

    1.实现

    表示方式不唯一

    2.对比

    2.3 十字链表与邻接多重表

    1.十字链表存储有向图

    2.邻接多重表存储无向图

    2.4 图的基本操作

    3 图的遍历

    3.1 广度优先遍历(BFS)

    1.思路

    2.实现

    3.分析

     

     

    3.2 深度优先遍历

    1.实现

    2.分析

     

    4 最短路径问题

    4.1 最小生成树

    1.定义

    对于一个带权连通无向图G=(V, E),生成树不同,每棵树的权〈即树中所有边上的权值之和)也可能不同。设R为G的所有生成树的集合,若T为R中边的权值之和最小的生成树,则T称为G的最小生成树((Minimum-Spanning-Tree, MST)。

    2.Prim算法 

    从某一个顶点开始构建生成树;每次将代价最小的新顶点纳入生成树,直到所有顶点都纳入为止。

    3.Kruskal算法

    每次选择一条权值最小的边,使这条边的两头连通(原本已经连通的就不选),直到所有结点都连通

    4.2 BFS算法

    求无权图的单源最短路径

    只能用于无权图

    4.3 Dijkstra算法

    求单源最短路径

    第1轮︰循环遍历所有编点,找到还没确定最短路径,且dist最小的顶点Vi,令final[i]=ture。检查所有邻接自Vi的顶点,若其final值为false,则更新dist和path信息。

    第2轮:循环遍历所有结点,找到还没确定最短路径,且dist最小的顶点Vi,令final[i]=ture。

    第3轮∶循环遍历所有结点,找到还没确定最短路径,且dist最小的顶点Vi,令final[i]=ture。

    第4轮︰循环遍历所有结点,找到还没确定最短路径,且dist最小的顶点Vi,令final[i]=ture。

    对于负权值带权图,该算法可能失效。

    4.4 Floyd算法

    各顶点间的最短路径

    可以解决带负权值的图,但无法解决带有负权回路的图,因为其可能没有最短路径。

    4.5 有向无环图描述表达式

    1.定义

    若一个有向图中不存在环,则称为有向无环图,简称DAG图(Directed Acyclic Graph)

    2.解题方法

    4.6 拓扑排序

    1.定义

    AOV网( Activity on Vertex Network,用顶点表示活动的网):用DAG图(有向无环图)表示一个工程。顶点表示活动,有向边表示活动Vi必须先于活动Vj进行

    拓扑排序︰在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序:每个顶点出现且只出现一次;若顶点A在序列中排在顶点B的前面,则在图中不存在从顶点B到顶点A的路径。

    2.实现

    ①从AOV网中选择一个没有前驱(入度为O)的顶点并输出。②从网中删除该顶点和所有以它为起点的有向边。③重复①和②直到当前的AOV网为空或当前网中不存在无前驱的顶点为止。

    3.逆拓扑排序

    ①从AOV网中选择一个没有后继(出度为0)的顶点并输出。②从网中删除该顶点和所有以它为终点的有向边。③重复①和②直到当前的AOV网为空。

    4.7 关键路径

    1.AOE网

    在带权有向图中,以顶点表示事件,以有向边表示活动,以边上的权值表示完成该活动的开销(如完成活动所需的时间),称之为用边表示活动的网络,简称AOE网(Activity On Edge NetWork)

    在AOE网中仅有一个入度为0的顶点,称为开始顶点(源点),它表示整个工程的开始;也仅有一个出度为0的顶点,称为结束顶点(汇点),它表示整个工程的结束。

    从源点到汇点的有向路径可能有多条,所有路径中,具有最大路径长度的路径称为关键路径,而把关键路径上的活动称为关键活动

    活动a的最早开始时间e(i)——指该活动弧的起点所表示的事件的最早发生时间

    活动a的最迟开始时间l(i)——它是指该活动弧的终点所表示事件的最迟发生时间与该活动所需时间之差

    2.求关键路径步骤

     

     

     

  • 相关阅读:
    pytorch深度学习实战lesson27
    前端技能树,面试复习—— 风中劲草:知识要点精讲精炼手册(一)
    208道Java中高级高频面试题(含答案)
    C++笔记之通用多态函数包装器std::function
    Android---touch 事件分发
    数学建模——最大流问题(配合例子说明)
    【FreeRTOS(六)】队列
    前端开发入门笔记(八)CSS3属性详解:动画详解+Flex布局图文详解+Web字体
    Lit(四):生命周期、使用 Shadow DOM
    数据库基础
  • 原文地址:https://blog.csdn.net/m0_49939117/article/details/128081324