【图论】关于邻接表建图

本文详细介绍了邻接表数据结构在图论问题中的应用,特别是用于存储和遍历图的边。通过一个实例说明了邻接表如何初始化、建边,并讨论了其在稀疏图中的优势以及在边数较多时的不足。此外,提供了VS1557热浪题目的SPFA+SLF优化代码,展示了邻接表在实际问题中的运用。
摘要由CSDN通过智能技术生成

邻接表
作为一名现役Oier在做过无数图论题目和搜索题目之后,可以说是相当熟悉了,但是今天做的一道题,让我对于邻接表表示直接懵逼,原来在跑最短路的时候还是明白每个数组各自的作用的,然而一旦在其它题目中遇到就不会了,所以今天特意复习,并决定好好整理一下,以后别再懵逼了…


附上神犇ahalei的Blog:http://blog.csdn.net/ahalei/article/details/23356781
(里面对于邻接表的解释还是很透彻的)


邻接表

但什么是邻接表呢(・ω・。)ʃฺ??

众所周知,邻接矩阵是用矩阵实现存图的一类数据结构
而邻接矩阵,则是用链表(好多个)来实现存图的一类数据结构
但是手打链表mdzz,指针都不怎么用啊(一直都是在用数组下标模拟)
所以说对于邻接表我们也可以用数组来模拟实现

代码(结构体封装)

int head[maxn];

struct node{
    int from,to,cost,next;
}e[maxn << 1];//无向图(maxn << 1)

初始化

for(int i = 1;i <=n;i++){
  //n由题意而来
    head[i] = -1;
}

//当然也可以一步写成memset(head,-1,sizeof(head)),但是实测比for一遍更慢

这里,head 数组存的是我们建图时,某个点所存的最后一条边的编号

例如我们存入点1的一条边,这条边是总第5条边,则我们将head[1]赋值为5,但是之前我们1号点若已经记录过一条边,如果我们这时修改head[1]那么之前那条边不就没了吗,但是显然我们不能让这条边消失,而是应该想办法让它在head修改之后依然能够被找到

这时候别忘了

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值