图论·图的存储

图论的存储

  • 邻接表
  • 邻接矩阵(一般不用)

邻接表

结构体数组实现

  • 缺点:如果使用结构体的话,node结构体初始化很慢。
cpp 复制代码
// common one
vector<list<int>>g;
// another type
typedef struct node{
	int val;
	int dist;// 如果需要节点到某点的距离的话
}
vector<list<node>>g;
  • 插入操作
cpp 复制代码
q.push_back(item)

链表前向星

  • 邻接表定义:
  • h代表链表头指针,指向v,nxt数组中的每一个节点
  • v代表某一个边终点节点 的具体值,nxt代表指向的边。注意这两个数组其实都是代表边 ,可能会出现1->3,2->3,3号节点对应v和nxt中不同的位置的情况!
  • v和nxt的大小等于边数
  • len代表总共有多少边。
cpp 复制代码
int h[100009], v[100009], nxt[100009], len = 0;
  • 插入操作
cpp 复制代码
void insert(int x,int y) {
	len++;
	v[len] = y;
	nxt[len] = h[x];
	h[x] = len;
	d[y]++;
}
  • 容易出错的操作:搜索时我们假定得到的是节点编号 ,但是我们nxt和h指向的是该节点的实际存储位置。
cpp 复制代码
for (int i = h[cur]; i != -1; i = nxt[i]) {
	int node = v[i];
	d[node]--;
	if (!d[node]) {
		q.push(node);
	}
}
相关推荐
h_a_o777oah3 天前
【图论】网络流:Dinic 算法模板实现原理及解题技巧
c++·算法·图论·acm·网络流·最小割·dinic算法
有点。4 天前
C++03阶段练习(练习题)
数据结构·算法·图论
-dzk-9 天前
【图论】LC 207.课程表
图论
wuyk5559 天前
18.Kruskal 算法:用最短的边连成一张网
开发语言·算法·图论
-dzk-10 天前
【图论】LC 994.腐烂的橘子
图论
-dzk-10 天前
【图论】LC 200.岛屿数量
深度优先·图论
Lyyaoo.12 天前
【图论】岛屿数量/腐烂的橘子/课程表/实现前缀树
图论
lvwangshu13 天前
图论:LCA、树的直径、树的重心、二分图与 Tarjan 缩点
算法·图论
hansang_IR15 天前
【题解】[APIO2023] 赛博乐园 / cyberland
c++·算法·图论
aqiu11111116 天前
【并查集 / 图论】蓝桥云课 - 魔法大陆的城市群(求无向图连通块数量)题解
蓝桥杯·图论