图的存储表示及示例
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>是E中的边0,若(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=⎣⎢⎢⎡0111100010011010⎦⎥⎥⎤A2=⎣⎢⎢⎡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>是E中的边0,若(vi,vj)或<vi,vj>不是E中的边且i=j∞,若(vi,vj)或<vi,vj>不是E中的边且i=j
例如:
A
3
=
[
0
12
8
∞
∞
0
∞
∞
以上是关于图的存储表示及示例的主要内容,如果未能解决你的问题,请参考以下文章