图的概念
图是由一些点vertex
和这些点之间的连线边edge
组成,通常记作:G = (V, E)
。
图的种类
根据图是否有方向,可以将图划分为:无向图和有向图。
无向图
无向图如下如G1所示,无向图的边都是不区分方向的。G1 = (V1, {E1})。其中:
V1 = {A, B, C, D, E, F}。V1表示由“A, B, C, D, E, F”几个顶点组成的集合。
E1 = {(A, B), (A, C), (B, C), (B, E), (B, F), (C, F), (C, D), (E, F), (C, E)}。E1是由“边(A, B), 边(A, C) …”组成的集合。(A, B)表示由顶点A和顶点C连接成的边。
有向图
有向图如下如G2所示,有向图不同于无向图,它的所有的边都是有方向的。G2 = (V2, {A2})。其中:
V2 = {A, B, C, D, E, F, G}。V2表示由“A, B, C, D, E, F, G”几个顶点组成的集合。
A2 = {<A, B>, <B, C>, <B, F>, <B, E>, <C, E>, <E, D>, <D, C>, <E, B>, <F, G>}。E1是由“矢量<A, B>, 矢量<B, C> …”组成的集合。矢量<A, B>表示由”顶点A“指向”顶点B“的有向边。
邻接点和度
邻接点
一条边上的两个顶点叫做邻接点。例如无向图G1中的顶点A和顶点B就是邻接点。
在有向图中,出了邻接点之外,还有出边和入边的概念。
出边:指的是以该顶点为起点的边。
入边:指的是以该顶点为终点的边。
例如,有向图G2中的B和E是邻接点,<B, E>是B的出边,还是E的入边。
度
在无向图中,某个顶点的度是邻接到该顶点的边或数目。例如:无向图G1中顶点A的度是2。
在有向图中,度还有出度和入度之分。
入度:指的是以该顶点为终点的变的数目。
出度:指的是以该顶点为起点的边的数目。
顶点的度 = 入度 + 出度。
例如:上面有向图G2中,顶点B的入度是2,出度是3。顶点B的度 = 2+3 = 5。
路径和回路
路径:如果顶点(Vm)到顶点(Vn)之间存在一个顶点序列。则表示Vm到Vn是一条路径。
路径长度:路径中“边的数量”。
简单路径:若一条路径上顶点不重复出现,则是简单路径。
回路:若路径的第一个顶点和最后一个顶点相同,则是回路。
简单回路:第一个顶点和最后一个顶点相同,其他各顶点都不重复的回路则是简单回路。
连通图和连通分量
连通图:对于无向图而言,任意两个顶点之间都存在一条无向路径,则称该无向图为连通图。对于有向图而言,任意两个顶点之间都存在一条有向路径,则称该有向图为强连通图。
连通分量:非连通图中各个连通子图称为该图的连通分量。非强连通图的极大强连通子图叫做强连通分量。
权
图分为有权图和无权图。有权图在每一条边上都有一个相关的数字,这个数字一般表示成本代价或消耗等。图下图所示:
生成树
无向连通图的生成树是它的极小连通子图,如果图中含有 n 个顶点,则其生成树由 n -1 条边构成。
若是有向图,则可能得到它的由若干有向树组成的生成森林。
图的存储结构
图中常用的存储结构是邻接矩阵和邻接表。
邻接矩阵
邻接矩阵用矩阵来表示图。采用矩阵来描述图中顶点之间的关系(及边的权)。
假设图中顶点数为n,则邻接矩阵定义为:
A[i][j] = 1; //Vi和Vj之间有边存在
A[i][j] = 0; //Vi和Vj之间无边存在
如下面无向图G1的临界矩阵示意图:
如下图是有向图G2的邻接矩阵示意图:
邻接表
邻接表是图的一种存储方法。它是改进后的邻接矩阵,缺点是不方便判断两个顶点之间是否有边,但是更节省空间。
如下图是无向图G1的邻接表示意图:
如下图是有向图G2的邻接表示意图: