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

关于最短路模板

时间:2020-02-01 21:14:27      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:ext   距离   链式前向星   需要   基础上   使用   依次   节点   前向星   

  1.0  Floyd(),简单粗暴,三重循环遍历,可求多源两点距离,但毕竟复杂度高,不适合过大的图。

  2.0  Bellman(),借用一个(存放起点u、终点v、权值w的)结构体edge,遍历次数取决于边的个数*节点个数n,将复杂的三重循环,缩小到O(nm)的复杂度。

  2.1  在Bellman()的基础上增设一个标记数组neg[],用于判断负圈。

  3.0  SPFA(),在Bellman的基础上,增加了一个vector<edge>e[num],将同起点的边归类,再次减小复杂度。同时在函数中用到了队列,类似于BFS,取出队首的节点以后,遍历以该节点为起点的所有边,然后依次将终点插入队尾。

  3.1  SPFA()链式前向星,原模板仍有缺陷,遇到特别大的图时,用邻接表也会超空间限制,此时就需要用链式前向星来存图。摒弃了上一模板使用的vector,重用结构体数组,并在结构体中增设next指向同起点的下一条边,增设了数组head[],用联系同一起点的前后两条边。同时增设addedge函数应对复杂起来的加边程序。链式前向星是用来应对图过大,节点过多的情况,减小空间复杂度。

  4.0  dijkstra(),大体是在原版的SPFA的基础上,改用了优先队列priority_queue,能够更快地找到某个节点的最短路径, 以减小时间复杂度。

关于最短路模板

标签:ext   距离   链式前向星   需要   基础上   使用   依次   节点   前向星   

原文地址:https://www.cnblogs.com/0424lrn/p/12249975.html

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