C语言数据结构:图!

目录

一、图的基本概念

 1、基本概念 

 2、无向图、有向图

 3、简单图、多重图

 4、顶点的度、入度、出度

 5、顶点-顶点的关系描述

 6、连通图、强连通图

 7、研究图的局部--子图

 8、连通分量

 9、生成树

 10、生成森林

 11、边的权、带权图/网

 12、几种形态特殊的图

 13、小结

二、图的存储

1、邻接矩阵(空间复杂度 = O(n*n))

2、邻接表

3、十字矩阵 和 邻接多重表

 1、十字链表法​编辑

 2、十字链表法性能分析

 3、邻接多重表法

 4、小结

三、图的基本操作

 1、Adjacent(G,x,y):判断图G是否存在边或(x,y)。,y>

 2、Neighbors(G,x):列出图G中与结点x邻接的边

 3、InsertVertex(G,x):在图G中插入顶点x。

 4、DeleteVertex(G,x):从图G当中删除顶点x。

 5、AddEdge(G,x,y):若无向边(x,y)或有向边不存在,则向图中添加该边。,y>

 6、FirstNeighbor(G,x) :求图G中顶点x的第一个邻接点,若有则返回顶点号。若x没有邻接点或图中不存在x,则返回-1。

 7、NextNeighbor(G,x,y):假设图G中顶点y是顶点x的一个邻接点,返回除y之外顶点x的下一个邻接点的顶点号,若y是x的最后一个邻接点,则返回-1。

 8、Get_edge_value(G,x,y):获取图G当中无向边(x,y)或有向边对应的权值。,y>

Set_edge_value(G,x,y):设置图G当中无向边(x,y)或有向边对应的权值。,y>

 10、小结

 四、图的遍历

 1、广度优先遍历(BFS)

 代码实现:

 遍历序列可变性

 代码存在的问题并改进

 复杂度分析

 广度优先生成树

  广度优先生成森林

 2、深度优先遍历(DFS)

 图的深度优先遍历和树的先根遍历类似​

 算法存在的问题

 解决方案,与广度优先部分的相同

 复杂度分析

 时间复 杂度​

 深度优先遍历序列

 深度优先生成树

 图的遍历和图的连通性

 小结​

 五、图的应用

 1、最小生成树​编辑

 2、小结

 六、最短路径问题

 1、BFS算法(广度优先算法)

 2、Dijkstra算法

 3、Floyd算法

 4、小结

 七、有向无环图

1、基础及方法

2、拓扑排序

3、逆拓扑排序

 小结

 八、关键路径


 

一、图的基本概念

 知识总览

1、基本概念 

 2、无向图、有向图

 3、简单图、多重图

 4、顶点的度、入度、出度

 5、顶点-顶点的关系描述

 

 6、连通图、强连通图

 7、研究图的局部--子图

 生成子图:包含原图的所有顶点

 8、连通分量

 

 9、生成树

 10、生成森林

 11、边的权、带权图/网

 

 12、几种形态特殊的图

 

 

 13、小结

二、图的存储

知识总览

1、邻接矩阵(空间复杂度 = O(n*n)

 

 

 

 性能分析

 

邻接矩阵法的性质

 小结

2、邻接表

 

 

 小结

3、十字矩阵 和 邻接多重表

 

 1、十字链表法

 2、十字链表法性能分析

3、邻接多重表法

 

 

 4、小结

三、图的基本操作

知识总览

 1、Adjacent(G,x,y):判断图G是否存在边<x,y>或(x,y)。

 2、Neighbors(G,x):列出图G中与结点x邻接的边

 

 3、InsertVertex(G,x):在图G中插入顶点x。

 4、DeleteVertex(G,x):从图G当中删除顶点x。

 

 

 5、AddEdge(G,x,y):若无向边(x,y)或有向边<x,y>不存在,则向图中添加该边。

6、FirstNeighbor(G,x) :求图G中顶点x的第一个邻接点,若有则返回顶点号。若x没有邻接点或图中不存在x,则返回-1。

 

 7、NextNeighbor(G,x,y):假设图G中顶点y是顶点x的一个邻接点,返回除y之外顶点x的下一个邻接点的顶点号,若y是x的最后一个邻接点,则返回-1。

 

 8、Get_edge_value(G,x,y):获取图G当中无向边(x,y)或有向边<x,y>对应的权值。

Set_edge_value(G,x,y):设置图G当中无向边(x,y)或有向边<x,y>对应的权值。

 

 10、小结

 四、图的遍历

知识总览

 1、广度优先遍历(BFS)

 代码实现:

 

 遍历序列可变性

代码存在的问题并改进

问题:非连通图,则无法遍历完所有结点

改进方式:判断数组当中时候还有false,有就从false结点开始调用BFS遍历

结论:对于无向图,调用BFS函数的次数 = 连通分量数

 复杂度分析

 广度优先生成树

 

  广度优先生成森林

 练习题小结

 2、深度优先遍历(DFS)

 知识总览

 图的深度优先遍历和树的先根遍历类似

 

 算法存在的问题

 

 解决方案,与广度优先部分的相同

 复杂度分析

空间复杂度

 时间复 杂度

深度优先遍历序列

邻接表的遍历序列不唯一。

邻接矩阵是唯一的。

深度优先生成树

 

 深度优先生成森林

 图的遍历和图的连通性

 

 

 小结

 五、图的应用

1、最小生成树

 

 

 (1)Prim算法

(2)Kruskal算法

 

 (3)两种算法的比较

(4)Prim算法的实现思想流程

 

 

 

 

 

 

 

 (5)Kruskal算法的实现思想流程 

 

 

 

 

 2、小结

 六、最短路径问题

知识概览

1、BFS算法(广度优先算法)

 

 2、Dijkstra算法

 

 以此类推。。。

 

 

 

 【注意】负权值下不适用

 3、Floyd算法

 

 

 核心代码

 复杂实例

  

 

 

4、小结

 

 七、有向无环图

1、基础及方法

 

 

 解决方法

 2、拓扑排序

AOV网:用顶点表示活动的网

 拓扑排序:找到做事的先后顺序

 

 代码实现

 

 

3、逆拓扑排序

 实现

 

 小结

 八、关键路径

注意区别AOV网

 

 

 

 

 

 

 

 

 

 

 

 

 小结

  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值