目录
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>
一、图的基本概念
知识总览
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网
小结