本文介绍了图论中的基本概念,包括简单路径、无向及有向完全图等,并详细阐述了图的存储结构如邻接矩阵、邻接链表等。此外还探讨了几种重要的图算法,例如深度优先搜索、广度优先搜索、最小生成树算法(Prim算法和Kruskal算法)以及最短路径算法(Dijkstra算法)。
 
基本术语
  • 简单路径:顶点不重复出现的路径
  • 无向完全图:任意两个结点间都存在边
  • 有向完全图:任意两个结点间都存在方向相反的两条弧
  • 回路:第一个顶点与最后一个顶点相同的路径
  • 简单图:不存在顶点到其自身的边,且同一边不重复出现
  • 连通图:任意顶点之间都有路径
  • 连通分量:连通图的极大连通子图

  • 强连通图:从任意顶点 i 到顶点 j 均有路径的有向图
  • 强连通分量:强连通图的极大连通子图
  • 生成树:
  • 生成森林

存储结构
邻接矩阵
 
 
邻接链表
 
十字链表
邻接多重表

图的遍历
1、给顶点编号
2、遍历所有顶点:多次重复从某一顶点出发遍历 + 访问标志记录顶点是否已经访问
深度优先


邻接矩阵实现
邻接表实现
广度优先
邻接矩阵实现
邻接表实现
 

最小生成树
MST性质
Prim算法
(逐个加入)
存储结构: 不断读取任意两个顶点边的权值:邻接矩阵
关键:找到连接U与U-V的最短边来扩充生成树T
 
 
Kruskal算法
(寻不回路边)
存储结构: 依次对图的边操作:邻接表
关键:如何判断两个顶点是否位于两个连通分量(即是否与生成树的边形成回路)
 

最短路径
Dijkstra算法
(逐个加入+不断修改最优路径)(贪心算法)
存储结构:快速读取任意两结点的边的权值:邻接矩阵
辅助数组:
dist[i] 表示当前找到的从源结点到终点结点的最短路径长度
path[i] 表示 当前找到的从源结点到终点结点的具体最短路径结点(可用字符串表示)
s[n] :源点到已生成终点的集合
 
 
参考:《数据结构(C++版)》王红梅
 
 
 
 





转载于:https://www.cnblogs.com/Doing-what-I-love/p/5445435.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值