标签: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