链式前向星(python实现)

文章介绍了链式前向星作为一种优化内存的图存储方法,对比了它与邻接表的区别,并提供了Python实现的代码示例,用于添加边和遍历节点的连接边情况。

链式前向星是一种非常优秀地存储图的方式,在存储过程中,我们采用链式方式存储每个点连接的边,相比于邻接表存储,优势在于可以更好地分配内存,不用受到python等语言中开数组动态的特点导致的数组空间浪费

通常不需要使用链式前向星

看网上都是通过c++来实现链式前向星的,遂使用python给后来者一些参考(狗头保命)


对链式前向星的原理做一些解释,如图,如果我们的数据如下

4
1 2 20
1 3 50
2 4 80
3 1 90

其中1 2 20 表示从点1到点2有一条边权为20的边
如果是采用邻接表方式,我们是将[2,20]加入字典或者列表的方式,而采用链式前向星的方式,我们是对每一条边编号,这个编号来自于边输进来的顺序,每个前向星中有三个属性,e1表示对于编号为cnt的边,边的终点是什么,w1自然表示边权

重点在于h1这一个属性,他指的是与u相连的上一条边的编号,通过从头遍历到尾的方式,我们就可以知道所有与u这个节点连接的边

简单的解释,1,2,3表示点,4没有边与他相连,所以不填,注意此处是有向图


下面是代码

#********************************************
# * Author: liuaaa
# ********************************************

#n表示顶点个数,m表示边个数
n = 10000
m = int(1e4)+10
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值