学习重点
1. 图的基本术语
图的定义:顶点的有穷集合和顶点之间的边集合组成。简言之,点和边组成图。
无向边:两个顶点之间的边是没有方向的。
有向边、弧: 顶点 i 到顶点 j 的边是有方向的。
无向图:任意两个顶点之间的边都是无向边。
有向图:任意两个顶点之间的边都是有向边。
无向图
邻接:无向图中,任意两点之间存在边,则称这两点互为邻接点,对应边依附于该两点;有向图中,任意两点存在弧 < i , j >,则称顶点 i 邻接到 j 。
无向完全图:任意两个顶点之间都存在边,含 n 个顶点的无向完全图有 n*(n-1)/2条边。
有向完全图:任意两点间存在方向互为相反的两条弧,含 n 个顶点的有向完全图有 n*(n-1)条边。
稀疏图、稠密图:边很少的图为稀疏图,反之为稠密图。稀疏和稠密是相对而言。
顶点的度:在无向图中,顶点的度为依附于该顶点的边的条数。在具有 n 个顶点 E 条边的无向图中,所有度和为 2E。
入度和出度:在有向图中,顶点的入度为指向该顶点为弧头的个数。出度为该顶点为弧尾的个数。在具有 n 个顶点 E 条边的有向图中,出度和与入度和均为 E。
权和网:权是指对边赋予有意义的值。带权的图称为网或者网图。
路径、路径长度、回路:路径是两点之间有通路,即边。路径长度为边的数目,第一个顶点和最后一个顶点相同的路径为回路或者环。
简单路径和简单回路:顶点不重复出现的路径称为简单路径,除第一个和最后一个顶点不重复出现称为简单回路。
子图:两个图之间有包含关系,被包含的图称为子图,图可以有多个子图。
连通图、连通分量:无向图中,任意顶点之间有路径,则为连通图,反之为非联通图。非连通图的极大连通子图称为联通分量。
强连通图、强连通分量:在有向图中,任意顶点之间有路径,则为强连通图,反之为非强联通图。非强连通图的极大连通子图称为强联通分量。
生成树、生成森林:连通图 G 的生成树是包含 G 所有顶点的极小连通子图。连通图的生成树是自由树,可任意指定一个顶点为树的根节点。一棵具有 n 个顶点的生成树有且仅有 n-1 条边。
有向图
2. 图的遍历操作
深度优先遍历:类似于树的前序遍历。
思路:
- 访问顶点 v ;
- 从 v 未被访问的邻接点中选取一个顶点 w ,从 w 开始出发进行深度优先遍历;
- 重复上述两步,直至图中所有和 v 有路径相同的顶点都被访问到。
广度优先遍历:类似与树的层序遍历。
- 访问顶点 v;
- 依次访问 v 的各个未被访问的邻接点 i , j , k ;
- 再分别从 i, j , k 出发依次访问它们未被访问的所有邻接点;
广度优先遍历–队列形式
3.图的存储结构
邻接矩阵:
邻接表:
十字链表: