目录
弗洛伊德算法(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();
- }
结果:

-
相关阅读:
3、Linux下安装
【S2021010基于python的物品的协同过滤算法图书推荐系统-哔哩哔哩】 https://b23.tv/NyecCaQ
k8s 服务升级为啥 pod 会部署到我们不期望的节点上??看来你还不懂污点和容忍度
已安装的nginx追加ssl模块
element-ui中el-table数据合并行和列,应该怎么解决
Excel·VBA日期时间转换提取正则表达式函数
【前端修炼场】 — 这些标签你学会了么?快速拿下 “hr”
【RS采样】A Gain-Tuning Dynamic Negative Sampler for Recommendation (WWW 2022)
QT tableview 实现千万数据加载,内存消耗小
这是什么代码帮我看看
-
原文地址:https://blog.csdn.net/qq_74156152/article/details/134496531