码迷,mamicode.com
首页 > 其他好文 > 详细

图-结构

时间:2019-03-19 12:08:55      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:int   优先   利用   时间复杂度   距离   最短路   完成   矩阵   max   

邻接矩阵

适用于小型的图,对于稀疏图很浪费,可用二维数组实现

邻接表

适用于稀疏图,可用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];




图-结构

标签:int   优先   利用   时间复杂度   距离   最短路   完成   矩阵   max   

原文地址:https://www.cnblogs.com/wei-huan/p/10557507.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!