弗洛伊德算法大致有点像dp的推导
dp[i][j] = min(dp[i][k] + dp[k][j], dp[i][j]),
其中 i 是起始点,j 是终止点。k是它们经过的中途点。
通过这个公式不断地更新dp[i][j],得到最短路径长。

我们先定义两个矩阵,minpath[i][j],表示的是从 i 到 j 当前得到的最短路,
road[i][j] = k.表示的是从 i 到 j 点要经过的点是 k 然后不断更新road[k][j],
直到k == j。
这个可以适用与有向图和无向图,就看你minpath[i][j] 怎么初始化了,

#include<iostream>
using namespace std;
const int inf = 0x3f3f3ff3;
const int maxn = 110;
int minpath[maxn][maxn],road[maxn][maxn], n, m, s, t;
void init() {for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)if(i ==j)    minpath[i][j] = 0, road[i][j] = j;else    minpath[i][j] = inf, road[i][j] = j;
}
void Floyed() {for(int k = 1; k <= n; k++) {//中间转折点。for(int i = 1; i <= n; i++) {//起始点。for(int j = 1; j <= n; j++) {//终点。if(minpath[i][j] > minpath[i][k] + minpath[k][j]) {//当前的路是否更好,minpath[i][j] = minpath[i][k] + minpath[k][j];road[i][j] = road[i][k];}}}}for(int i = 1; i <= n; i++) {t = s;cout << minpath[s][i] <<endl;//s->t的花费。while(t != i) {//从起点开始输出路径。cout << t << "->";t = road[t][i];//不断更新路径点。}cout << i <<endl;}
}
int main() {cin >> n >> m >> s;//输入表示n个点,m条边,求s为起始点,求其到 n 个点的距离。init();//初始化,int x, y;for(int i = 0; i < m; i++) {//输入边。cin >> x >> y;cin >> minpath[x][y];}Floyed();//算法本体,return 0;
}

最后运行情况,加上了路径的输出。

说明一下我上面的代码并不是这道题目的正解,就算上面的代码除去我的路径输出也是错的,
题目的n到了1e4,而这种方法最多就是处理一两百的数据,
这里就是为了方便举个例子。

最短路弗洛伊德(Floyd)算法加保存路径相关推荐

  1. 数据结构与算法(7-4)最短路径(迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法)

    目录 一.最短路径概念 二.迪杰斯特拉(Dijkstra)算法(单源最短路径) 1.原理 2.过程 3.代码 三.弗洛伊德(Floyd)算法(多源最短路径) 1.原理 2.存储 3.遍历 4.代码 参 ...

  2. 算法其实很简单—弗洛伊德(Floyd)算法

    目录 1.弗洛伊德(Floyd)算法介绍 2.弗洛伊德(Floyd)算法最佳应用-最短路径 3.弗洛伊德(Floyd)算法图解分析 3.1 弗洛伊德算法的步骤: 4.代码实现 1.弗洛伊德(Floyd ...

  3. Java迪杰斯特拉(Dijkstra)算法与弗洛伊德(Floyd)算法

    1.Java迪杰斯特拉(Dijkstra)算法与弗洛伊德(Floyd)算法 1.1 迪杰斯特拉(Dijkstra)算法 1.1.1 迪杰斯特拉(Dijkstra)算法介绍 迪杰斯特拉(Dijkstra ...

  4. 060.弗洛伊德(Floyd)算法的原理以及解决最短路径问题

    1. 弗洛伊德(Floyd)算法的原理 1.1. 基本介绍 1.1.1. 弗洛伊德算法和迪杰斯特拉算法比较 1.2. 算法步骤 1.3. 步骤图解 1.3.1. 第一轮循环 1.3.2. 找出每个点作 ...

  5. Java实现之弗洛伊德(Floyd)算法

    一.问题引入 1.问题引入 1)胜利乡有7个村庄(A,B,C,D,E,F, G) 2)各个村庄的距离用边线表示(权),比如A-B距离5公里3)问:如何计算出各村庄到其它各村庄的最短距离? 二.基本介绍 ...

  6. 【数据结构笔记24】单源最短路(迪克斯拉Dijkstra算法),多源最短路(弗洛伊德Floyd算法)

    本次笔记内容: 7.1.1 概述 7.1.2 无权图的单源最短路 7.1.3 有权图的单源最短路 7.1.3-s 有权图的单源最短路示例 7.1.4 多源最短路算法 文章目录 最短路径问题 最短路径问 ...

  7. 弗洛伊德(Floyd)算法求解图的最短路径

    弗洛伊德(Froyd)算法用于求解所有顶点到所有顶点的的最短路径.时间复杂度为O(n^3). 正如我们所知道的,Floyd算法用于求最短路径.Floyd算法可以说是Warshall算法的扩展,三个fo ...

  8. 最短路:Floyd算法(Python实现)

    Floyd-Warshall算法是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权(但不可存在负权回路)的最短路径问题.Floyd算法的根本原理是动态规划. 算法描述 开始:对于每一对顶点 ...

  9. 蓝桥杯-最短路(floyd算法)

    算法训练 最短路   时间限制:1.0s   内存限制:256.0MB 问题描述 给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证没有负环).请你计算从1号点到其他点的最短路(顶点从1到 ...

最新文章

  1. 小小军团获取服务器配置文件,小小军团2资源攻略 六种办法让你不再缺资源
  2. system 后门 php,php后门的编写
  3. vue企业项目demo_基于SpringBoot和Vue的企业级中后台开源项目
  4. Spring+Mybatis多数据源配置
  5. 【重难点】【Redis 02】Redis 的持久化、Redis 的主从复制和集群、哨兵
  6. fiddler之请求过滤(Filters)
  7. Tensorflow图像调整大小
  8. C# CLRInsideOut 托管代码与非托管代码互操作,产生相关调用代码的好工具 C++ 头文件转C# 的好工具...
  9. VS C++ 从字符串中查找字符最后一次出现的位置 strrchr
  10. 简述Java内存模型的happen before原则
  11. Android模拟器
  12. java无头浏览器_PuppeteerSharp无头浏览器.Net Sdk(Puppeteer)
  13. 程序员需要知道的97件事情之 ------- 谋定而后动
  14. AI健身,是消费者的伪命题还是资本的好生意?
  15. xcode6.3 ineligible devices解决方法
  16. 500台网吧设计方案实验--基于华为模拟器
  17. 基于归一化互相关函数的语音基音周期检测
  18. wireshark https 抓包
  19. 相位相干切换超低相噪多通道信号源解决方案
  20. 【tm1650调试记录】

热门文章

  1. 中国这10条逆天公路,火爆外网,你都认识多少?
  2. 85元一个万能工具箱,配齐24种螺丝刀+扳手,媲美德国工艺,家庭必备
  3. 国外的幼儿数学竟然这样出题?来测测你的孩子都会做吗?
  4. 男孩子也是要护肤的!!!
  5. 惊呆了!竟然还有这样的操作!
  6. python wx提示框字体_使用wxStyledTextCtrl实现代码提示
  7. pythonlive2d_Unity-Live2D资源载入
  8. python 中文编码差异_Python 编码为什么那么蛋疼?
  9. linux内核分为子系统,Linux内核内存管理子系统分析【转】
  10. python交通标志识别_YOLOv3目标检测实战:交通标志识别