Floyd算法解决多源最短路问题
说好的写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 = 10000000; const int maxn = 1000; int x, y, z; int dis[maxn][maxn]; int n, m; void floyd() { for (int k = 1; k <= n; ++k) { //枚举中间点k for (int i = 1; i <= n; ++i) { //枚举端点i for (int j = 1; 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 = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) { dis[i][j] = maxint; } } for (int i = 1; i <= n; ++i) dis[i][i] = 0; for (int i = 0; i < m; ++i) { cin >> x >> y >> z; dis[x][y] = dis[y][x] = z; } floyd(); // cout << dis[1][n] << endl; for (int i = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) { if(j!=i) cout << "起点"<<i<<"到点" <<j<< "的最短距离是" << dis[i][j] << endl; } cout << endl; } } return 0; }
运行结果如下:
其实核心还是dijkstra算法,所以这个算法没什么好讲的了,那么就到这了哦!
赶紧教妹子写代码去,哈哈!
谁人畏惧现实,谁人将从梦中消失
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构