最短路算法
来源:互联网 发布:node-http-proxy原理 编辑:程序博客网 时间:2024/06/06 09:45
弗洛伊德(Floyd)
设
for(int k = 1; k <= n; ++k) // 对k的枚举也可以写在最里层 for(int i = 1; i <= n; ++i) for(int j = 1; j <= n; ++j) dist[k][i][j] = min(dist[k][i][j], dist[k-1][i][k] + dist[k-1][k][j]);
这样表示状态的话相当于一个动态规划,此时
for(int k = 1; k <= n; ++k) // 对k的枚举此时只能写在最外层 for(int i = 1; i <= n; ++i) for(int j = 1; j <= n; ++j) dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);
确定步数后的最短路
设
// dist[1][i][j] 为原图for(int t = 2; t <= n; ++t) for(int k = 1; k <= n; ++k) // 对k的枚举也可以写在最里层 for(int i = 1; i <= n; ++i) for(int j = 1; j <= n; ++j) dist[t][i][j] = min(dist[t][i][j], dist[t-1][i][k] + dist[1][k][j]);
这样计算
// dist[0][i][j] 为原图for(int t = 1; t <= n; ++t) for(int k = 1; k <= n; ++k) // 对k的枚举也可以写在最里层 for(int i = 1; i <= n; ++i) for(int j = 1; j <= n; ++j) dist[t][i][j] = min(dist[t][i][j], dist[t-1][i][k] + dist[t-1][k][j]);
迪杰斯特拉(Dijkstra)加堆
priority_queue<pair<int, int> > que;bool popped[maxn];void dijkstra(int s){ for(int i = 1; i <= n; ++i) popped[i] = false; dist[s] = 0; que.push(make_pair(-dist[s], s)); while(!que.empty()){ int u = que.top().second; que.pop(); if(popped[u]) continue; popped[u] = true; for(int l = 0; l < mp[u].size(); ++l){ int v = mp[u][l]; if(dist[v] > dist[u] + 1){ dist[v] = dist[u] + 1; que.push(make_pair(-dist[v], v)); } } }}
0 0
- JavaScript最短路算法
- 最短路算法总结
- 最短路算法总结
- 最短路 Dijkstra算法
- 最短路算法
- 最短路算法
- 最短路-Floyd算法
- 算法训练 最短路
- 最短路算法Dijkstra
- 最短路算法解析
- 最短路--SPFA算法
- 算法训练 最短路
- 最短路kruskal算法
- 最短路SPFA算法
- Dijkstra最短路算法
- 最短路算法
- 最短路算法汇总
- 最短路算法
- Oracle 数据库开启关闭 及 端口监听相关命令
- 浅谈小波分析
- 新浪微博腾讯微博Android开发笔记
- sscanf整形输出误区
- 如何提问!很感谢原博主的分享,我自己也收获了许多!
- 最短路算法
- linux 下C语言学习路线
- linux和STL 常用头文件及说明
- C++设计模式浅识观察者模式
- java_basic_review(5) java继承
- 定制开发映客、花椒直播app 微信直播
- 一步步教你写StepView(流程指示器)
- Qt操作数据库1
- android6.25存储卡权限