【算法】单源最短路径和任意两点最短路径总结(补增:SPFA)
来源:互联网 发布:js弹出路径选择对话框 编辑:程序博客网 时间:2024/06/17 14:47
【Bellman-Ford算法】
【算法】Bellman-Ford算法(单源最短路径问题)(判断负圈)
结构:
#define MAX_V 10000#define MAX_E 50000int V,E; //顶点和边的数量 struct edge{ int from,to,cost;};edge es[MAX_E];//边集 int d[MAX_V]; //d[i]表示从某个点出发到i的最短路径
算法特点:1.每次都用所有的边更新所有的边,直到无可更新为止。
2.无负圈最多更新 V-1 次,否则有负圈。
【dijkstra算法】
【算法】Dijkstra算法(单源最短路径问题)(路径还原) 邻接矩阵和邻接表实现
结构1:
#define MAX_V 10000#define MAX_E 50000 int cost[MAX_V][MAX_V]; //cost[u][v]表示e = (u,v)的权值 int d[MAX_V]; //源点s出发的最短距离 bool used[MAX_V]; //标记使用过的点 int V; //顶点数
算法特点:1.每次都找没使用过的 d 最小的点,用这个点更新其他点。
2.不能解决有负圈的图。
结构2:
#define MAX_V 10000#define MAX_E 50000 int V; //顶点数 int d[MAX_V]; // d[i]表示i离源点的最短距离 struct edge{ int to,cost; }; typedef pair<int, int> P; //first是最短距离,second是顶点的编号 vector <edge> G[MAX_V]; // 边集
算法特点:1.用之前更新过的点,来更新其他点,直到无点可更新。
2.不能解决有负圈的图。
【Floyd-Warshall算法】
【算法】Floyd-Warshall算法(任意两点间的最短路问题)(判断负圈)
结构:
#define MAX_V 10000#define MAX_E 50000 int d[MAX_V][MAX_V]; // d[u][v]表示边e=(u,v)的权值(不存在时设为INF,不过d[i][i] = 0) int V; // 顶点数
算法特点:1.dp[i][j] = min(dp[i][j] , dp[i][k] + d[k][j]);
基于只有k-1个点的情况,从加入第k个点和不加第k个点中做选择。
2.能解决有负圈的图,如果d[i][i]出现负数说明有负圈。
拜读了一位大神的blog学会了SPFA算法:
【最短路算法】Dijkstra+heap和SPFA的区别
稠密图用Dijkstra,稀疏图用SPFA。
阅读全文
0 0
- 【算法】单源最短路径和任意两点最短路径总结(补增:SPFA)
- Floyd算法(任意两点间的最短路径)
- POJ 2139-- 最短路径 (floyd算法,任意两点间的最短路径)
- 最短路径问题的Dijkstra和SPFA算法总结
- 任意两点间的最短路径---floyd_warshall算法
- floyd算法(求任意两点间的最短路径)
- 任意两点之间最短路径
- 任意两点间的最短路径
- SPFA算法(最短路径)
- 最短路径算法---SPFA
- 最短路径----SPFA算法
- 【最短路径】SPFA算法
- SPFA算法【最短路径】
- 最短路径SPFA算法
- Floyd(求图中任意两点最短路径)
- 最短路径算法 dijkstra + floyd + spfa 【记录 总结】
- 最短路径算法总结(Floyd,bellmen-ford,dijkstra,Spfa)
- 最短路径算法总结(Floyd,bellmen-ford,dijkstra,Spfa)
- LeetCode 279. Perfect Squares
- nginx的upstream目前支持5种方式的分配
- Linux下启动tomcat的脚本文件
- 【angular】gyp ERR! build error msbuild.exe` failed with exit code: 1
- AndroidStudio 缓存文件夹配置
- 【算法】单源最短路径和任意两点最短路径总结(补增:SPFA)
- spring事物配置,声明式事务管理和基于@Transactional注解的使用
- ListView下拉刷新,上拉加载
- c语言基础知识2
- sklearn 机器学习练习
- 以root身份登录Linux
- 【Java笔记】 Week07
- HTML 转 Word
- *C语言操作符总结*