图论---图的存储

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

邻接矩阵

复制代码
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;
相关推荐
rannn_1111 天前
【力扣hot100】图论专题+模板|DFS、BFS、拓扑排序...
java·算法·leetcode·深度优先·图论
Fa_Mian_Tuan1 天前
图论基础 | 邻接多重表原理剖析 + 完整可运行C语言代码(插边/删边/释放)
c语言·数据结构·笔记·算法·图论
疯狂打码的少年1 天前
【数据结构】图的应用:最小生成树(Prim / Kruskal)
数据结构·笔记·算法·图论
Fa_Mian_Tuan4 天前
图论基础|邻接矩阵超详细讲解(含无向/有向/带权图+完整可运行C语言代码)
c语言·数据结构·笔记·算法·图论
有点。5 天前
C++二叉树二(练习题)
数据结构·c++·算法·图论
依然鸣6 天前
PTA团体程序设计天梯赛L1真题讲解L1-077-080
开发语言·c++·算法·深度优先·pat考试·图论
oier_Asad.Chen7 天前
【洛谷题解/AcWing题解/OI学习笔记】洛谷P2868【USACO07DEC】Sightseeing Cows G(01分数规划求最大比率)
算法·图论·spfa·二分·负环
wabs6667 天前
关于图论【A*算法 | 卡码网127.骑士的攻击的思考】
数据结构·算法·图论·卡码网·广搜的改进版
依然鸣8 天前
PTA团体程序设计天梯赛L2真题讲解L2-005-008
开发语言·数据结构·c++·算法·深度优先·pat考试·图论
wabs6669 天前
关于图论【最短路径之Bellman_ford 算法(单源有限最短路)|卡码网96.城市间货物运输III的思考】
数据结构·算法·图论·卡码网·bellman_ford·单源有限最短路