图-结构
Posted wei-huan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图-结构相关的知识,希望对你有一定的参考价值。
邻接矩阵
适用于小型的图,对于稀疏图很浪费,可用二维数组实现
邻接表
适用于稀疏图,可用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];
以上是关于图-结构的主要内容,如果未能解决你的问题,请参考以下文章