头像

Cyan

四川成都

深度强化学习炼丹师

信息学竞赛模板(十)— 邻接表

信息学竞赛模板(十)— 邻接表

2021-03-18 · 121次阅读 · 原创 · 数据结构与算法

定义

邻接表是树与图结构的一般化存储方式,还能用于实现开散列Hash表。领接表可以看做成“带有索引数组的多个数据链表”构成的结构集合。在这样的结构中存储的数据被分为若干类,每一类的数据构成一个链表。每一类还有一个代表元素,称为该类对应链表的“表头”。所有“表头”构成一个表头数组,作为一个可以随机访问的索引,从而可以通过表头数据定位到某一类数据对应的链表。

模板代码

const int N = 1e4 + 5, M = 1e5 + 5; int ver[M]; //顶点集合 int edge[M]; //边权值集合 int head[N]; //父顶点集合,指向其能到达的第一个子节点序号 int Next[M]; //本节点能到达的下一个节点序号 int tot; //节点个数,序号 bool v[N]; //加入有向边 (x,y),权值为z void add(int x, int y, int z) { ver[++tot] = y; edge[tot] = z; Next[tot] = head[x]; head[x] = tot; } //访问从 x 出发的所有点 void vis(int x) { v[x] = true; for(int i = head[x]; i; i = Next[i]) { int y = ver[i], z = edge[i]; if(!v[y]) vis(y); } }

标题: 信息学竞赛模板(十)— 邻接表
链接: https://www.fightingok.cn/detail/70
更新: 2022-09-18 22:36:19
版权: 本文采用 CC BY-NC-SA 3.0 CN 协议进行许可