邻接矩阵
适用于小型的图,对于稀疏图很浪费,可用二维数组实现
邻接表
适用于稀疏图,可用vector实现
求最小生成树
利用 Kruska 算法,可以直接保存边 u,v,w,以边的编号为索引
利用 prim 算法,需要每次取得最小的顶点,类似与 Dijkstra 算法,可以用邻接矩阵完成
求最短路径
Floyd 正权边,三重循环,首先枚举k,中间点
Dijkstra 从未使用的点中找一个距离最小的点,可以用邻接矩阵实现O(V^2),也可以用邻接表实现,用优先队列保存每个点到源点的最小路径长度和编号,时间复杂度O(VE)
BellFord 可以查找负权边,判定有没有负环,若有环则更新点d[u]的次数会大于N次,可以循环边 时间复杂度O(VE)
常见实现
枚举点很方便,但是浪费空间,实现简单
int G[maxn][maxn];
能通过点查找到边,存储方便,不利于枚举边
vector<Edge> G[maxn];
枚举边很方便,点也很方便,G的下标即代表点,保存的是边的编号,能轻松对所有便进行排序。
vetor<Edge> eg;
int G[man];
图-结构
原文地址:https://www.cnblogs.com/wei-huan/p/10557507.html
时间: 2024-10-18 03:21:24