如图:
也就是说,如果两节点之间有一条弧,则邻接矩阵中对应的元素为1;否则为0。可以看出,这种表示法非常简单、直接。但是,在邻接矩阵的所有元素中,只有少量为非零元。如果网络比较稀疏,这种表示法浪费大量的存储空间,从而增加了在网络中查找弧的时间。
同样,对于网络中的权,也可以用类似邻接矩阵的 矩阵表示。只是此时一条弧所对应的元素不再是1,而是相应的权而已。如果网络中每条弧赋有多种权,则可以用多个矩阵表示这些权。
也就是说,在关联矩阵中,每行对应于图的一个节点,每列对应于图的一条弧。如果一个节点是一条弧的起点,则关联矩阵中对应的元素为1;如果一个节点是一条弧的终点,则关联矩阵中对应的元素为 -1;如果一个节点与一条弧不关联,则关联矩阵中对应的元素为0。对于简单图,关联矩阵每列只含有两个非零元(一个 1,一个-1)可以看出,这种表示法也非常简单、直接。但是,在关联矩阵的所有 m n mn mn 个元素中,只有 2 m 2m 2m个为非零元。如果网络比较稀疏,这种表示法也会浪费大量的存储空间。但由于关联矩阵有许多特别重要的理论性质,因此它在网络优化中是非常重要的概念。
同样,对于网络中的权,也可以通过对关联矩阵的扩展来表示。例如,如果网络中每条弧有一个权,我们可以把关联矩阵增加一行,把每一条弧所对应的权存储在增加的行中。如果网络中每条弧赋有多个权,我们可以把关联矩阵增加相应的行数,把每一条弧所对应的权存储在增加的行中。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0uG1c8Eu-1599571217461)(https://pic002.cnblogs.com/images/2011/295488/2011050620274397.png)]
例如,例7所示的图,假设弧 ( 1 , 2 ) , ( 1 , 3 ) , ( 2 , 4 ) , ( 3 , 2 ) , ( 4 , 3 ) , ( 4 , 5 ) , ( 5 , 3 ) 和 ( 5 , 4 ) (1,2),(1,3),(2,4),(3,2),(4,3),(4,5),(5,3)和(5,4) (1,2),(1,3),(2,4),(3,2),(4,3),(4,5),(5,3)和(5,4)上的权分别为 8 , 9 , 6 , 4 , 0 , 3 , 6 和 7 8,9,6,4,0,3,6和7 8,9,6,4,0,3,6和7,则弧表表示如上:
为了便于检索,一般按照起点、终点的字典序顺序存储弧表,如上面的弧表就是按照这样的顺序存储的。
邻接表表示法将图以邻接表(adjacency lists)的形式存储在计算机中。所谓图的邻接表,也就是图的所有节点的邻接表的集合;而对每个节点,它的邻接表就是它的所有出弧。邻接表表示法就是对图的每个节点,用一个单向链表列出从该节点出发的所有弧,链表中每个单元对应于一条出弧。为了记录弧上的权,链表中每个单元除列出弧的另一个端点外,还可以包含弧上的权等作为数据域。图的整个邻接表可以用一个指针数组表示。例如,例7所示的图,邻接表表示为
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LPKnDGC4-1599571217466)(.\img\weighed_graph.png)]
例如,在例7所示的图中,仍然假设弧(1,2),(l,3),(2,4),(3,2),(4,3),(4,5),(5,3)和(5,4)上的权分别为8,9,6,4,0,3,6和7。此时该网络图可以用前向星形表示法表示如下:
3),(4,5),(5,3)和(5,4)上的权分别为8,9,6,4,0,3,6和7。此时该网络图可以用前向星形表示法表示如下: