链式前向星加边操作图解

【知识点解析】
图的存储方法很多,除了最常见的邻接矩阵、邻接表外,还有
链式前向星
链式前向星是
用数组模拟邻接表存图的一种优秀的数据结构,是一种特殊的边集数组。它在算法竞赛中被广泛应用。
从链式前向星的核心代码 https://blog.csdn.net/hnjzsyjyj/article/details/126474608 可知,它的实现用到了val[]、e[]、ne[]、h[]等四个数组。这四个数组的含义必须十分清楚,否则将对理解链式前向星造成困难。现以链式前向星加边操作的核心代码为例,分述如下:
一、链式前向星加边操作的核心代码

void add(int a,int b,int w) {
	val[idx]=w,e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}

二、val[]、e[]、ne[]、h[] 四个数组的含义
初始时 h[] 数组初始化为-1。然后,以链式前向星加边操作的核心代码为例,分述val[]、e[]、ne[]、h[] 四个数组的含义如下。
val[idx] 表示第 idx 条边的权值。
e[idx] 表示第 idx 条边的终点。
ne[idx] 表示与第 idx 条边同起点的最近一次被添加的边的编号。
h[a] 表示以结点 a 为起点的最近一次被添加的边的编号。
这个表述是在使用 ne[idx]=h[a] 时,也即使用 h[a]=idx++ 更新 h[a] 之前而言的。要特别注意这个语境。

【链式前向星加边过程图解】
下面以如下测试数据为例,图解链式前向星的加边过程。

/*起点 终点 权值
1 2 7
1 4 5
2 3 12
3 4 18
2 5 36
3 5 51
*/

在图解过程中,请仔细品读 val[idx]、e[idx]、ne[idx]、h[a] 等数组值的变化。


 

依据 https://www.bilibili.com/read/cv13449207 所述过程及本例数据所创建的链式前向星如下图所示。

【参考文献】
https://www.bilibili.com/read/cv13449207
https://cloud.tencent.com/developer/article/1912251

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值