邻接表-数组实现+深搜广搜(超详细)

图的邻接表存储与访问数组实现算法分析

图的存储结构有两种,基于数组的邻接矩阵存储和基于链表的邻接表存储。邻接矩阵存储比较容易实现,但需要很大的内存来存储,访问的时间复杂度高。基于链表的邻接表时间复杂度和空间复杂度比前者要小,但是难于实现。邻接表的数组实现方法综和了以上两种存储方法的优点,在时间复杂度和空间杂度上更优,并且易于理解和实现。

图的邻接矩阵存储,时间复杂度为o(n2),n是图中结点的个数,邻接表的时间复杂度是o(m),m是图边的个数。在最坏的情况下m=(n)*(n-1),但通常图的边远远小于n2,所以时间复杂度比邻接矩阵要优很多。
2.邻接表的数组实现
2.1算法思想
说明:
图上有n个顶点,m条边。每条边都有一个头顶点和尾顶点。头顶点指向此边,尾顶点指向此边的下一条边,如图一所示,边AB是一条以顶点A为头顶点,以顶点B为尾顶点的边。
在这里插入图片描述
实现此算法,首先要借助一个结构体SIDE来存储图中边的信息,内部包含tailNode、nextSide、weight。tailNode表示尾顶点;nextSide表示为有同一头顶点的下一条边的位置,此位置为记录边的结构体edge数组的下标;Weight在带权图中表示一条边的权值,可根据情景加或不加。在图一中,顶点A是AB、AD的头顶点,边AB的结构体中的nextSide可表示为边AD所在的下标位置,tailNode为顶点B。对应的AB边所在的位置由顶点A指出。
此处需要一个head数组,来存储其位置。它的作用是存储头顶点指向的第一条边的下标位置。那么A顶点所指向的第二条边的位置就由第一条边的nextSide指出,以此类推。
具体实现过程:
先输入顶点个数,边的个数,再将head数组赋初值为-1,表示图中的每一个顶点指向的边都为空。然后再输入每一条边头尾顶点。根据头尾顶点创建边,将边信息存于edeg结构体数组中。具体做法为:实现CreateABoundary函数,传参头顶点、尾顶点的下标。用countEdge来记录边的数量&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值