深入理解链式前向星

***************装载请申明出处**************


这个文档是别人问我链式前向星的时候匆忙写的,如果还有什么讲的不清楚的地方欢迎大家提出来

链式前向星初始数据:

Struct edges{

int to;

Int nextEdge;

Int weight;

}edge[];//多少条边,无向图要乘以二,同时记录两个方向因为起点不同

Int M = 0;

Int head[];//多少个节点

Void addEdge(int from,int to,int weight){//起点,终点,权重

Edge[M]. to = to;

Edge[M].nextEdge = head[from];

Edge[M].weight = weight;

Head[from] = M++;

}



首先要理解head[from]的一个概念,首先注意到M这个变量,每记录进来一条边然后这个变量就+1,那么这个M就是用来记录边的标号的,

那么head[from]是什么?

我们知道from是这条边的起点,注意到这个M是这条边的编号,那么head[from]就好理解了,

就是head[from]是以from为起点的一条边它的值就是这条边的编号.

那它的值是什么呢?

注意到开始的时候我们全部head数组全部初始化为-1,那么开始就是没有共同边的意思,

这个时候我们拿一组数据过来实验一下

1 2

1 3

开始的时候是没有的,当输入1 2这组数据的时候

Edge[0].to = 2,edge[0].nextEdge = head[1] = -1; head[1] = 0; M++  M=1;

再次加入1 3这组数据

Edge[1].to = 3,edge[1].nextEdge = head[1] = 0; head[1] = M++;此时head[1]=1;

如果之后还有以1为起点的边,然后head[1]数组就会一直更新下去,它的值为最后一次更新head[1]的那一条边,

理解完head数组之后.nextEdge的值为什么呢?

注意到每一次都有.nextEdge = head[from],head[from]为最后一次更新head[from]的一条以from为起点的边,

所以.nextEdge实际上就是指向上一条以from为起点的边,

这就就和链表一样,head[from]为头节点,根据这个值可以找到一条以from为起点的边,

然后又可以通过那条边的nextEdge找到上一个以from为起点的边,

就这样一直找,from为起点的边就能全部遍历一遍了.之后就可以按照这个思路自己推算一遍了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值