图论
文章平均质量分 52
逆风微笑的魔法师
一个人热爱逆向的小学生
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
拓扑排序复习
问题本质:有向无环图的宽度优先遍历。 本质:拓扑图的最短路 就是 最熟悉的DP。 规定:每条边都是从起点指向终点。无逆序。 算法思路: 入度为0的点全部作为起点. 一个入读数组d[];入度数组在加边的时候初始化。 遍历d数组,if(d[i]==0)那么这个点入队。 然后bfs。 队列里的次序就是拓扑排序。 拓扑排序 不唯一。 static void bfs(){ for(int i= 1;i<=N;i++) if(d[i]==0) Q[++tt] = i; //把入度为0 的真正的.原创 2021-07-16 10:41:55 · 273 阅读 · 0 评论 -
SPFA最短路算法(稀疏图的更优选择)(允许负权)(邻接表)(简单)
问题定义:求1号点到所有点的最短路径 时间复杂度:平均Om 最差On*m 适合稀疏图(邻接表建图方式 前面文章有提到) 算法思想 把1号点加入队列(数组模拟队列,前面有提)。 不断的取点,不断的循环所有边,更新所有的点。 很像堆dij 退出条件是等所有的最短距离都无法更新的时候,队列为空。(队列只是个更新容器) 队列里面方的是:距离1号点距离变小的点 代码: static int spfa(){ Arrays.fill(dist,0x3f3f3f3f); ..原创 2021-07-13 11:02:59 · 329 阅读 · 0 评论 -
迪杰斯特拉算法dijkstra(单源最短路问题)(贪心)
最短路问题(有边权问题,无负环,无权图就BFS即可 01边权使用双端队列BFS) 难点:抽象建图,如何把题意变为点和边。 无向图也是一种特殊的有向图,算法不变。 如果存在重边,必须保留最短的那条重边。 建图有两种方式,之前的文章已经有提过 (建图不用new,耗费时间长) 邻接表 :适合稀疏图 和 树 ( O mlogn) 邻接矩阵 :适合稠密图 (O n^2) 选择哪种方式则根据题目 给定数据范围推出。 由于dijk算法是基于贪心的算法,因此禁止负环的出现。 稠密图 On^2: (原创 2021-07-13 10:39:54 · 461 阅读 · 0 评论
分享