文章目录
前言
图(graph)是一种比线性表和树更加复杂的非线性结构,是对结点的前驱和后继个数不加限制的数据结构,用来描述元素之间“多对多”的关系。
一、图的基本概念?
1.定义:
图G由顶点集V和边集E组成,记为G=(V,E)
-
V(G)表示图G中顶点的有限非空集。 用|V|表示图G中顶点的个数,也称为图G的阶
-
E(G)表示图G中顶点之间的关系(边)集合。 用|E|表示图G中边的条数。
2.分类
-
有向图
-
有向边(弧)的有限集合
-
弧是顶点的有序对
-
有向边表示<v,w>
-
v是弧尾(或起始点),w是弧头(或终端点)
-
v邻接到w或w邻接自v
-
-
-
无向图
-
无向边的有限集合
-
边是顶点的无序对
-
(v,w)
-
(v,w)=(w,v)
-
w,v互为邻接点
-
-
3.其他术语
1)简单图
-
1.不存在顶点到自身的边
-
2.同一条边不重复出现
2)多重图
-
若图G中某两个结点之间的边数多于一条,又允许顶点通过通过同一个边和自己关联
3)完全图
-
无向完全图
-
如果任意两个顶点之间都存在边
-
-
有向完全图
-
如果任意两个顶点之间都存在方向相反的两条弧
-
4)连通图
- 图中任意两个顶点都是连通的
5)连通分量
- 无向图中的极大连通子图
-
连通
-
顶点A到顶点B有路径
-
-
极大
-
1.顶点足够多
-
2.极大连通子图包含这些依附这些顶点的所有边
-
结论1:如果一个图有n个顶点,并且有小于n-1条边,则此图必是非连通图。
-
概要: 找连通分量的方法: 从选取一个顶点开始,以这个顶点作为一个子图,然后逐个添加与这个子图相连的顶点和边直到所有相连的顶点都加入该子图
6)强连通
- 顶点V到顶点W和顶点W到顶点V都有路径
7)强连通图
- 图中任一对顶点都是强连通的
8)连通图的生成树
- 包含图中全部n个顶点,但是只有n-1条边的极小连通子图
结论2:生成树去掉一条边则变成非连通图,加上一条边就会形成回路。
9)度
- 以该顶点为一个端点的边数目
-
无向图中顶点V的度是指依附于该顶点的边的条数,记为TD(v)
-
有向图中顶点V的度分为出度和入度
-
入度(ID)是以顶点v为终点的有向边的数目
-
出度(OD)是以顶点V为起点的有向边的数目
-
10)简单路径和简单回路
- 顶点不重复出现的路径称为简单路径。对于回路,除了第一个和最后一个顶点其余顶点不重复出现的回路称为简单回路
11)权和网
- 图中每条边赋予一定意义的数值,这个数值叫做这条边的权,有权值得图称为带权图,也叫做网
12)路径和路径长度
- 顶点p到q之间的路径是指顶点序列怕保存的,p,a,b,c,d,……q。路径上边的数目就是路径长度
13)回路(环)
- 第一个和最后一个顶点相同的路径称为回路或者环
14)距离
- 从顶点u到v的最短路径长度。不存在路径则为无穷
二、图的存储结构
1.邻接矩阵(顺序存储——二维数组表示)
图的存储需要考虑两个方面的信息存储,即定点信息和边(弧)的信息。图的邻接矩阵表示法是用一个一维数组存储顶点信息,一个一维数组存储弧的信息,该二维数组称为邻接矩阵。
设G=(V,E)是具有n(n>=1)个顶点的图,用邻接矩阵表示时需要存放n个顶点信息和n^2条边的信息(有边的表示1,无边的表示0)
1)无向图的邻接矩阵表示
特点:
①矩阵从左上到右下的一条对角线,其上的元素值必然是0。即:任何一个顶点与它自身是没有连接的。
②无向图对应的矩阵是一个对称矩阵,V0和V1有关联,那么V1和V0也必定有关联,因此A[0][1]和A[1][0]的值一定相等。
2)有向图的邻接矩阵表示
特点:
有向图的邻接矩阵表示不再是一个对称矩阵。从V0可以到达V1,从V1却未必能到达V0,因此A[0][1]和A[1][0]的值不一定相等。
3)邻接矩阵表示法的优缺点
优点:简单直观;可以快速查到一个顶点和另一顶点之间的关联关系;可以快速计算出度。
缺点:如果一个图有1000个顶点,其中只有10个顶点之间有关联(这种情况叫做稀疏图),却不得不建立一个1000X1000的二维数组,空间消耗代价较大。
2.邻接表(数组+链表)
图的邻接表存储结构是一种顺序分配和链式分配相结合的存储结构,包括数组和链表两个部分。
数组用来存储图的所有顶点信息,数组中每个元素表示图中的一个顶点,在邻接表中称为表头结点。
有向图的邻接表中,表结点的数目等于有向图的弧的数目;
无向图的邻接表中,表结点的数目是无向图中边的数目的二倍,’
邻接表表示法还有两种:十字链表、邻接多重表暂时不介绍