图的存储表示及示例

Posted 薛定谔的猫ovo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图的存储表示及示例相关的知识,希望对你有一定的参考价值。


图的存储

图的存储必须要完整、准确的反映顶点集和边集的信息。
无论是有向图还是无向图,主要的存储方式都有两种:邻接矩阵邻接表
前者属于图的顺序存储结构,后者属于图的链接存储结构。


邻接矩阵法

所谓邻接矩阵存储,是指用一个一维数组存储图中顶点的信息,用一个二维数组存储图中边的信息(即各个顶点之间的邻接关系),存储顶点之间邻接关系的二维数组称为邻接矩阵

若图G是一个有n个顶点的图,那么图的邻接矩阵是一个n阶方阵A。
A [ i ] [ j ] = { 1 , 若 ( v i , v j ) 或 < v i , v j > 是 E 中 的 边 0 , 若 ( v i , v j ) 或 < v i , v j > 不 是 E 中 的 边 A[i][j]=\\begin{cases} 1,\\quad 若(v_i,v_j)或<v_i,v_j>是E中的边\\\\ 0, \\quad若(v_i,v_j)或<v_i,v_j>不是E中的边\\\\ \\end{cases} A[i][j]={1,vi,vj<vi,vj>E0,vi,vj<vi,vj>E

例如:

   

A 1 = [ 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 ] A 2 = [ 0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 ] A_1=\\begin{bmatrix} 0&1&1&1\\\\ 1&0&0&0\\\\ 1&0&0&1\\\\ 1&0&1&0\\\\ \\end{bmatrix} \\quad\\quad\\quad A_2=\\begin{bmatrix} 0&1&1&0\\\\ 0&0&0&0\\\\ 0&0&0&1\\\\ 1&0&0&0\\\\ \\end{bmatrix} A1=0111100010011010A2=0001100010000010

不难看出,无向图的邻接矩阵是对称的,而有向图的邻接矩阵不一定对阵。
这是因为在无向图中, ( v i , v j ) = ( v j , v i ) (v_i,v_j)=(v_j,v_i) vi,vj=vj,vi,是同一条边,故一定有 A [ i ] [ j ] = A [ j ] [ i ] A[i][j] = A[j][i] A[i][j]=A[j][i]

对于带权图,若 v i v_i vi v j v_j vj之间有边相连,则邻接矩阵中对应项存放着该边对应的权值,若顶点 v i v_i vi v j v_j vj不相连,则用 ∞ \\infty 来代表这两个顶点之间不存在边:
A [ i ] [ j ] = { w i j ,   若 ( v i , v j ) 或 < v i , v j > 是 E 中 的 边 0 , 若 ( v i , v j ) 或 < v i , v j > 不 是 E 中 的 边 且 i = j ∞ , 若 ( v i , v j ) 或 < v i , v j > 不 是 E 中 的 边 且 i ≠ j A[i][j]=\\begin{cases} w_{ij},\\quad\\ 若(v_i,v_j)或<v_i,v_j>是E中的边\\\\ 0, \\quad\\quad若(v_i,v_j)或<v_i,v_j>不是E中的边且i=j\\\\ \\infty,\\quad若(v_i,v_j)或<v_i,v_j>不是E中的边且i≠j\\\\ \\end{cases} A[i][j]=wij, vi,vj<vi,vj>E0,vi,vj<vi,vj>Ei=jvi,vj<vi,vj>Ei=j

例如:

A 3 = [ 0 12 8 ∞ ∞ 0 ∞ ∞

以上是关于图的存储表示及示例的主要内容,如果未能解决你的问题,请参考以下文章

图的存储代码实现

邻接矩阵和邻接表存储的图的基本操作及完整代码

图 - 图的存储结构 - 邻接表表示法(一)

图的邻接表存储表示,图的深度优先和广度优先遍历

数据结构图之存储结构

图图的存储图的遍历