图论---图的存储

图的存储一般有三种,分别是邻接矩阵、邻接表和类,以下是三种存储方式的基础模板及相关注释:

邻接矩阵

复制代码
g[a][b] 存储边a->b的距离

邻接表

复制代码
// 又叫做链式向前星存储(头插法)
// 首先 idx 是用来对边进行编号的,然后对存图用到的几个数组作简单解释:
// he 数组:存储是某个节点所对应的边的集合(链表)的头结点;
// e  数组:用于访问某一条边指向的节点;
// ne 数组:由于是以链表的形式进行存边,该数组就是用于找到下一条边;
// w  数组:用于记录某条边的权重为多少。
int[] he = new int[N], e = new int[M], ne = new int[M], w = new int[M];
int idx = 0; // 为每一条边进行编号
// 初始化
memset(he, -1, sizeof he);
// 添加一条a到b的边,权重为c
void add(int a, int b, int c) {
    e[idx] = b;
    ne[idx] = he[a];
    he[a] = idx;
    w[idx] = c;
    idx++;
}
// 遍历a的出边
for(int i = he[a]; i != -1; i = ne[i]){
    int j = e[i], v = w[i]; // j为a的出边, v为权重
}

类

复制代码
class Edge {
    // 代表从 a 到 b 有一条权重为 c 的边
    int a, b, c;
};
vector<Edge> g;
相关推荐
Tairitsu_H8 天前
[C++高阶数据结构·图论下] 最短路径:为什么“挑最小的”一定正确?
数据结构·c++·图论
Tairitsu_H9 天前
[C++高阶数据结构·图论上] 最小生成树:为什么“选边”和“选点”是两条路?
数据结构·c++·图论·最小生成树
Mortalbreeze15 天前
0 - 1 BFS 算法详解:从基本原理到经典题目建模
数据结构·c++·算法·图论·宽度优先
一去不复返的通信er15 天前
力扣-图论-岛屿数量
算法·leetcode·图论
春弦_18 天前
自用算法整理二
数据结构·算法·图论
lvwangshu19 天前
P8981 「DROI」Round 1 距离 题解
动态规划·图论·题解·dp·树形dp·技巧·换根dp·性质题·思维好题
海海不掉头发19 天前
图论与应用_课堂笔记
笔记·图论
云淡风轻~窗明几净20 天前
角谷猜想最接近严格证明的测试 Version1.1.1
人工智能·算法·机器学习·图论
云淡风轻~窗明几净20 天前
角谷猜想与百度AI的对话dialog(原始稿)
人工智能·算法·机器学习·图论
罗湖老棍子21 天前
【例 1】Sightseeing Trip(信息学奥赛一本通- P1494)(洛谷-P10927)
数据结构·算法·图论·最短路·floyd·最小环