有向图:有向边(弧)的有限集合
弧记为<v(弧头的顶点),w(弧尾的顶点)>
有向图G1表示![]()
![]()
![]()
![]()

无向图:无向边(边)的有限集合
边记为(v,w)或(w,v),(v,w)=(w,v)
![]()
![]()
![]()
![]()

简单图:不存在重复边,不存在顶点到自己的边的图
多重图:图G中某2个结点之间的边数多于一条,又允许顶点通过同一条边和自己关联
完全图(简单完全图):任意两个顶点之间都存在边
无向完全图:n(n-1)/2条边
有向完全图:n(n-1)条弧

子图:和子集的概念一样
子图中包含原图所有顶点的,成为生成子图
连通、连通图和连通分量(无向边):
无向图中,若v→w顶点有路径存在,则v和w连通
若任意两个顶点都连通,则称为连通图
极大连通子图称为连通分量
连通图至多n-1条边
![]()

强连通图、强连通分量(有向边):
有向图中,若v→w和w→v顶点有路径存在,则v和w
强连通
若任意两个顶点都强连通,则称为强连通图
强连通至少n条边
![]()
极大连通子图:
1.连通图只有一个极大连通子图,就是它本身。(是唯一的)
2.非连通图有多个极大连通子图。(非连通图的极大连通子图叫做连通分量,每个分量都是一个连通图)
3.称为极大是因为如果此时加入任何一个不在图的点集中的点都会导致它不再连通。
下图为非连通图,图中有两个极大连通子图(连通分量)。

极小连通子图:
1.一个连通图的生成树是该连通图顶点集确定的极小连通子图。(同一个连通图可以有不同的生成树,所以生成树不是唯一的)
(极小连通子图只存在于连通图中)
2.用边把极小连通子图中所有节点给连起来,若有n个节点,则有n-1条边。如下图生成树有6个节点,有5条边。
3.之所以称为极小是因为此时如果删除一条边,就无法构成生成树,也就是说给极小连通子图的每个边都是不可少的。
4.如果在生成树上添加一条边,一定会构成一个环。
也就是说只要能连通图的所有顶点而又不产生回路的任何子图都是它的生成树。

极大连通子图是讨论连通分量的,极小连通子图是讨论生成树的
生成树、生成森林:
连通图的生成树是包含图中全部顶点的一个极小连通子图

顶点的度、入度、出度:
![]()
![]()
![]()
![]()
![]()
边的权和网:
边附上权值,就叫带权图,又称网
稠密图:边多,邻接矩阵
稀疏图:边少,邻接表
路径:顶点到顶点的路径序列
路径长度:路径上边的数目
回路/环:路径的第一个顶点和最后一个顶点相同
简单路径:路径中不出现重复顶点的路径
简单回路:除了第一个和最后一个顶点,其余顶点不重复出现
距离:u→v的最短路径,如果最短路径不存在,即距离为∞
![]()
无向图的邻接矩阵是对称矩阵
邻接矩阵:

![]()
无向图的邻接矩阵一定是对称矩阵,实际存储时可用压缩存储
![]()
![]()
稠密图适合使用邻接矩阵
确定图中有几条边,必须全扫描,代价很大
带权有向图中:0→无 ∞→自己到自己 他俩都不是有向边

![]()
邻接表:



![]()
![]()
无向图比有向图多E是因为,无向图中每条边出现了2次
十字链表法:(不手写代码
有向图的一种链式存储结构


tailvex:尾域
headvex:头域
hlink:弧头相同的下一条弧
tlink:弧尾相同的下一条弧
info:指向该弧的相关信息
firstin/firstout:以该顶点为弧头/弧尾的第一个弧结点
邻接多重表:(不手写代码
无向图的一种链式存储结构



mark:标记该边是否被搜索过
ivex/jvex:该边依附的两个顶点在图中的位置
ilink:下一条依附于顶点ivex的边
jlink:下一条依附于顶点jvex的边
info:指向和边相关的各种信息的指针域
firstedge:第一条依附于该顶点的边
图的遍历
广度优先搜索(Breadth-First-Search BFS)

2→1/6→5/3/7→4/8
类似于层序遍历
![]()
![]()
可以解决 非带权图的单源最短路径问题
深度优先搜索(Depth-First-Search DFS)

1→2→6→5→3→7
1→5→2→6→3→7
类似于先序遍历
可判断是否有回路
![]()
![]()
没错,两个方式的时间复杂度和BFS是一样的
图的应用:
最小生成树(MST)
最小生成树的性质:
树形不唯一
边的权值之总和是唯一的
![]()
Prim算法(普里姆):(生成的树不唯一
找到顶点后,把与之相连的 权值最小的那条边加入树
![]()

Kruskal算法(克鲁斯卡尔):(生成的树不唯一
不断选取权值最小的边
![]()

最短路径:

不带权的最短路径问题可以用广度优先算法算
带权路径长度:一条路径上所有边的权值之和
带权有向图G的最短路径问题分类:
单源最短路径(Dijkstra算法求解):求图中某点到其他各定点的最短路径
求每对顶点间的最短路径(Floyd算法求解)
Dijkstra算法求单源最短路径问题:(不适合带负权值的,需要n-1轮)
![]()




Floyd算法求各顶点之间最短路径问题:(不适合带回路的
允许带负权值,不允许包含带负权值的边组成的回路,适用于带权无向图
![]()
![]()








有向无环图(DAG图)


拓扑排序:
从AOV网中选一个没有前驱的结点输出
![]()
逆拓扑排序:选一个没有后继的输出
关键路径:




最早开始时间:从头开始算
最迟发生时间:从尾开始推
算出时间余量,时间余量=0就是关键活动
9182

被折叠的 条评论
为什么被折叠?



