目录
弗洛伊德算法(Floyd algorithm)也称为Floyd-Warshall算法,是一种用于求解所有节点对之间的最短路径的动态规划算法。它使用了一个二维数组来存储所有节点之间的最短距离,该数组的初始值为节点之间的直接距离或无穷大。然后,算法对数组进行多次迭代,每次迭代都尝试通过一个中间节点更新节点之间的距离值,直到所有节点之间的最短距离被计算出来。该算法的时间复杂度为O(n^3),适用于有向图或无向图,但不能处理带有负权边的图。

- #include
//弗洛伊德算法 - using namespace std;
- int G[100][100],D[100][100],Path[100][100];
- int n, t, maxlen=999;
- void Floyd()
- {
- for (int i = 0; i < n; i++)//初始化最短路径和前驱
- for(int j=0; j
- {
- D[i][j] = G[i][j];
- if (D[i][j] < maxlen && i != j)//i和j之间有弧,前驱设为i
- Path[i][j] = i;
- else//i和j之间无弧,前驱设为-1
- Path[i][j] = -1;
- }
- for(int k=0;k
- for(int i=0;i
- for (int j = 0; j < n; j++)
- {
- if (D[i][k] + D[k][j] < D[i][j])//i到j经过k点有更短路径
- {
- D[i][j] = D[i][k] + D[k][j];//更新D[i][j]
- Path[i][j] = Path[k][j];//更改前驱
- }
- }
- for (int i = 1; i < n; i++)//访问从0点到各点的最短距离
- {
- cout << "0点到" << i << "的最短路径权值为:" << D[0][i] << " ";
- cout << "路径为:";
- int a = Path[0][i];
- cout << i<< " ";
- while (a != 0)
- {
- cout << a << " ";
- a = Path[0][a];
- }
- cout << endl;
- }
- }
- int main()
- {
- cout << "输入顶点数:" << endl;
- cin >> n;
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++)
- G[i][j] = maxlen;
- cout << "输入边数:" << endl;
- cin >> t;
- for (int i = 0; i < t; i++)
- {
- int v1, v2, w;
- cin >> v1 >> v2 >> w;
- G[v1][v2] = w;
- }
- Floyd();
- }
结果:

-
相关阅读:
php面试常问面试题
微信小程序云开发教程——墨刀原型工具入门(常用组件)
电脑技巧:原版Windows系统与Ghost系统的区别
一个简单的UDP客户端和服务端的完整C++示例
感觉 C++ 很简单,但为何这么多劝退的?
云原生Spark UI Service在腾讯云云原生数据湖产品DLC的实践
Git Hooks简介及结合Husky和Commitlint检测提交代码规范
JVM学习(五)--方法区
(附源码)node.js基于Vue技术的外卖平台的设计与实现 毕业设计 151448
元宇宙iwemeta:《时代》杂志新封面,元宇宙将改变一切
-
原文地址:https://blog.csdn.net/qq_74156152/article/details/134496531
-
最新文章
-
沪漂五周年了:我越来越迷茫了
Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
MySQL-Seconds_behind_master的精度误差
[MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
Agent OS :五种驯服不确定性的范式
PortSwigger SQL注入LAB11
数据库即时编译JIT
[Begin]AI Learn Data Day 0
深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU