
最短路
御用铲屎官
没有简述。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
最短路——Spfa算法
该算法使用一个队列进行维护,最初将源点加入到队列,每次取出一个元素,并且对与其相邻的点都进行松弛,若某个点松弛成功再入队,vis数组是表示在队内的元素。定义部分:const int Max = 0x3f3f3f3f;int poi_num, edge_num, cnt;struct edge{ //链式前向星的边结构体 int v; int nex;原创 2018-01-25 14:59:35 · 578 阅读 · 0 评论 -
最短路——Dijkstra算法
Dijkstra算法用于解决最短路问题,其时间复杂度为o(n^2)。该算法大体步骤如下: 设定一个顶点集合,首先将源点加入集合内,接下来找距离远点最近距离的一个点,将其加入到集合内,用它来更新不在集合内的所有与它相连的源点能到达的点的距离,然后不断进行这个操作,n-1次之后就更新完了所有的点。查找不在集合内的源点所能到达的最近的点并加入集合:for(int j = 1; j原创 2018-01-25 14:31:18 · 481 阅读 · 0 评论 -
最短路——Bellman-Ford算法
由于Dijkstra算法难以解决负环问题,因此有Bellman_Ford算法的使用。当回路中出现负环时,由于n个点,任意一个点最多进行n-1次松弛(可以缩短路径时的操作),所以当n-1次松弛之后进行判断能否再次松弛,如果可以就说明出现负环。而这个算法的缺点是时间复杂度是立方级别的。进行n-1次松弛:for(int k = 1; k = poi_num - 1; k++){原创 2018-01-25 14:42:25 · 459 阅读 · 0 评论 -
最短路——Floyd算法
该算法是大暴力,最外层循环是跳转点,内层分别是出发点和终点。#include #include using namespace std;int map[1005][1005];const int Max = 0x3f3f3f3f;void init(int n){ for(int i = 0; i <= n; i++){ for(int j = 0;原创 2018-01-25 14:45:43 · 233 阅读 · 0 评论