Floyd算法解决多源最短路问题
2024-09-18 16:39:02
说好的写dijkstra 算法堆优化版本的,但是因为,妹子需要,我还是先把Floyd算法写一下吧!啦啦啦!
咳咳,还是说正事吧!
------------------------------------------------说正事专用分隔符------------------------------------------
用一个关系式,表达一下Floyd算法和dijkstra算法之间的关系
是不是很好懂,其实就把dijkstra算法做了n遍,额鹅鹅鹅,也不能说n遍吧,看有多少个点,
每个点轮流做起点,就能便利出所有的最短路的值,话不多说,直接上代码好吧。
问题还是上篇博客的问题(https://www.cnblogs.com/laysfq/p/9808088.html)
#include<iostream>
#include<algorithm>
using namespace std;
const int maxint = ;
const int maxn = ;
int x, y, z;
int dis[maxn][maxn];
int n, m; void floyd() {
for (int k = ; k <= n; ++k) { //枚举中间点k
for (int i = ; i <= n; ++i) { //枚举端点i
for (int j = ; j <= n; ++j) { //枚举端点j
dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
}
}
}
}
int main() {
while (cin >> n >> m&&n&&m) {
for (int i = ; i <= n; ++i) {
for (int j = ; j <= n; ++j) {
dis[i][j] = maxint;
}
}
for (int i = ; i <= n; ++i) dis[i][i] = ;
for (int i = ; i < m; ++i) {
cin >> x >> y >> z;
dis[x][y] = dis[y][x] = z;
}
floyd();
// cout << dis[1][n] << endl;
for (int i = ; i <= n; ++i) {
for (int j = ; j <= n; ++j) {
if(j!=i) cout << "起点"<<i<<"到点" <<j<< "的最短距离是" << dis[i][j] << endl;
}
cout << endl;
}
}
return ;
}
运行结果如下:
其实核心还是dijkstra算法,所以这个算法没什么好讲的了,那么就到这了哦!
赶紧教妹子写代码去,哈哈!
最新文章
- Angular杂谈系列1-如何在Angular2中使用jQuery及其插件
- MySQL Workbench建表时 PK NN UQ BIN UN ZF AI 的含义
- Scrollview嵌套Listview运行后最先显示出来的位置不在顶部而是中间问题
- Access数据库的模糊查询到底是用*还是%
- 【代码笔记】iOS-获得现在的时间
- Beanstalk消息队列的实现
- Coding上传项目步骤
- MyBatis学习系列一之环境搭建
- apply和call的区别在哪里
- POJ 1789 Truck History (最小生成树)
- 归约函数reduce&;映射数组map(笔记)
- hdu 1011 Starship Troopers_树状dp
- 拦截器的四种拦截方式以及Filter的执行顺序(17/4/8)
- Vue中 $ref 的用法
- Ubuntu16.04用源安装Nginx+PHP5.6+MySQL5.6
- 记一次treegrid checkbox 选择问题
- 本地git远程github
- js设计模式总结5
- Visual Studio2010不能安装Silverlight4_Tools,提示语言不一致
- PHP接入微信H5支付