本篇目录
一、图定义
图是一种较线性表和树更为复杂的数据结构,其定义为:
图是由顶点的有穷非空集合与顶点之间边的集合构成,通常表示为:G(V, E), G表示一个图,V表示图中顶点的集合,E表示顶点之间边的集合。
如下,就是一个图:
二、图术语了解
图中数据元素我们称之为顶点,图中任意两个顶点都可能存在关系,顶点之间关系用边来表示。
若两个顶点Vi与Vj之间的边没有方向,则称这条边为无向边, 用(Vi,Vj)表示,注意这里是圆括号
如果图中任意顶点之间都是无向边,则称该图为无向图,在无向图中任意两个顶点之间都存在边,则称该图为无向完全图,上图就是一个无向完全图。
若两个顶点Vi与Vj之间的边有方向,则称这条边为有向边,也称作弧, 用<Vi,Vj>表示,注意这里是尖括号
如果图中任意顶点之间都是有向边,则称该图为有向图,在有向图中任意两个顶点之间都存在方向互为相反的两条弧,则称该图为有向完全图,如下图:
有些图的边或者弧具有与其相关的数字,这种与图或弧相关的数字叫做权值。
在无向图中如果两个顶点之间有路径,则称这两个顶点是联通的,如果图中任意两个顶点都是联通的,则称图是连通图。
在无向图中顶点的边数叫做顶点的度。
在有向图中顶点分为出度和入度,入度就是指向自己的边数,而出度则相反。
如下图:
A结点:出度为3,入度为1
B结点:出度为1,入度为2
以上讲解了一些图的基本术语,没什么难度,大概了解一下就可以了。
三、图的存储
图的结构比较复杂,任意两个元素都可能产生关系,所以一般存储结构无法满足。
邻接矩阵存储方式
图是由顶点和边(或者弧)组成的,可以单独存储顶点和边,顶点简单,可以用一位数组来存储,但是边呢?边就是两个顶点之间的关系,可以用一个二维数组来存储,这种存储方式就是邻接矩阵存储方式。
邻接矩阵存储方式就是用两个数组来存储,一个一维数组,一个二维数组,一维数组用来存储顶点,二维数组用来存储顶点之间的关系,也就是边或者弧。
无向图邻接矩阵存储方式:
如下无向图:
一维数组存储顶点数组:
二维数组存储顶点(边,弧)之间关系:
无向图边之间关系的二维数组用0或者1来填充,如果两个顶点之间直接连通则为1,不直接连通则为0,有个注意点就是直接不是间接连通。比如A与B之间直接连通所以填1,而A与D之间不直接连通则为0.
有向图邻接矩阵存储方式:
如下有向图:
存储顶点的一维数组与上面一样
二维数组存储顶点(边,弧)之间关系: