第七章:图
基本概念:
图是由顶点的有穷非空集合和顶点之间边的集合组成的,通常表示为:G(V,E),其中,G表示一个图,V是G图中顶点的集合,E是图G中边的集合
概念区别:
- 线性表中数据叫元素,树形结构中数据叫结点,图中数据叫顶点。
- 线性表和树种都可以没有数据,但是图中不行必须有
- 图中任意俩点之间都可能有关系,顶点之间的逻辑关系用边表示,边集可以是空
定义:
无向边:顶点Vi到Vj之间的边没有方向,则称这条边为无向边,用(Vi,Vj)表示
无向图:图中所有边都是无向边
有向边(弧):俩顶点之间的边有方向,用<Vi(弧尾),Vj(弧头)>表示
有向图:所有边都有方向
简单图:没有自关联顶点和重复边
无向完全图:任意俩个点都有边, 边数 = N*(N-1)/2
有向完全图:所有顶点都有俩条方向的边 边数 = N*(N-1)
稀疏稠密图
网:带权图称为网
顶点与边界关系
关联关系
顶点V的度取决于和V关联的边的条数(度)
出度,入度
路径:一个顶点到另一个顶点的顶点序列
路径长度:路径上弧的数目
回路:第一个顶点和最后一个顶点相同的路径
简单路径:序列中顶点不重复出现的路径
连通图:图中任意俩个点都是连通的叫连通图
连通分量:无向图中的极大(含有最多顶点的)连通子图
强连通图:有向图中每俩个顶点都双向连通
生成树:
图的存储结构
邻接矩阵
图的邻接矩阵是用俩个数组来表示图,一个一维数组存储图中顶点信息,一个二维数组存储图中的边或者弧的信息
无向图的边数组为一个对称矩阵
有向图的弧数组为一个不对称矩阵
邻接表
十字链表
顶点结构:
邻接多重表
边集数组
图的遍历
从图中某一顶点出发,访遍图中其余顶点,且使每一个顶点仅被访问一次,这一过程就叫做图的遍历
深度优先遍历(DFS)
类似于树的前序遍历
广度优先遍历(BFS)
类似于树的层次遍历
最小生成树
把构造连通网的最小代价生成树称为最小生成树
普利姆算法(Prim)
克鲁斯卡尔算法
图的应用
- 最短路径
- 拓扑排序