数据结构 图的存储邻接矩阵与邻接链表

本文介绍了图在程序设计中的重要性,并详细阐述了图的两种常用存储方式——邻接矩阵和邻接链表。通过Java代码展示了这两种存储方式的实现,包括无权无向图、无权有向图、有权无向图和有权有向图的实例。邻接矩阵适用于边较多的情况,而邻接链表则在顶点较多、边较少时更为节省空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图在程序设计中的运用是广泛的,例如地图、网络、物流、交通等。怎样将一个图数字化存储在计算机中,是在程序设计中更好的运用图的基础。下面就说说图的两种常用存储方式邻接矩阵和邻接链表,并使用Java实现。


1、邻接矩阵

图G=(V,E)是一个n顶点的图,使用邻接矩阵存储图的方法是使用一个n*n的二维数组存储,图的顶点编号和二维数组索引的映射方式有时从0开始,有时从1开始。对于0开始的映射方式,当不存在一条边时常常需要-1标记。对于从1开始的映射方式将会浪费第0列和第0行,但标记时没有边可以使用0标记。为了方便下面以1开始的映射方式为例,映射函数如下。

图G=(V,E)是一个n顶点的图,u、v是图G中的任意两个顶点。

当G是无权无向图:

A(u,v)={1  如果(u,v)属于E或(v,u)属于E

   {0 其它

当G是加权无向图:

A(u,v)={weight(权值)   如果(u,v)属于E或(v,u)属于E

   {0 其它

当G是无权有向图:

A(u,v)={1(权值)   如果(u,v)属于E

   {0 其它

当G是加权有向图:

A(u,v)={weight(权值)   如果(u,v)属于E

   {0 其它


实际应用中的图都是加权图,很少使用无权图,所以下面就是用加权无向图为例,演示图和二维数组的映射关系:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值