最短路弗洛伊德(Floyd)算法加保存路径
弗洛伊德算法大致有点像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)算法加保存路径相关推荐
- 数据结构与算法(7-4)最短路径(迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法)
目录 一.最短路径概念 二.迪杰斯特拉(Dijkstra)算法(单源最短路径) 1.原理 2.过程 3.代码 三.弗洛伊德(Floyd)算法(多源最短路径) 1.原理 2.存储 3.遍历 4.代码 参 ...
- 算法其实很简单—弗洛伊德(Floyd)算法
目录 1.弗洛伊德(Floyd)算法介绍 2.弗洛伊德(Floyd)算法最佳应用-最短路径 3.弗洛伊德(Floyd)算法图解分析 3.1 弗洛伊德算法的步骤: 4.代码实现 1.弗洛伊德(Floyd ...
- Java迪杰斯特拉(Dijkstra)算法与弗洛伊德(Floyd)算法
1.Java迪杰斯特拉(Dijkstra)算法与弗洛伊德(Floyd)算法 1.1 迪杰斯特拉(Dijkstra)算法 1.1.1 迪杰斯特拉(Dijkstra)算法介绍 迪杰斯特拉(Dijkstra ...
- 060.弗洛伊德(Floyd)算法的原理以及解决最短路径问题
1. 弗洛伊德(Floyd)算法的原理 1.1. 基本介绍 1.1.1. 弗洛伊德算法和迪杰斯特拉算法比较 1.2. 算法步骤 1.3. 步骤图解 1.3.1. 第一轮循环 1.3.2. 找出每个点作 ...
- Java实现之弗洛伊德(Floyd)算法
一.问题引入 1.问题引入 1)胜利乡有7个村庄(A,B,C,D,E,F, G) 2)各个村庄的距离用边线表示(权),比如A-B距离5公里3)问:如何计算出各村庄到其它各村庄的最短距离? 二.基本介绍 ...
- 【数据结构笔记24】单源最短路(迪克斯拉Dijkstra算法),多源最短路(弗洛伊德Floyd算法)
本次笔记内容: 7.1.1 概述 7.1.2 无权图的单源最短路 7.1.3 有权图的单源最短路 7.1.3-s 有权图的单源最短路示例 7.1.4 多源最短路算法 文章目录 最短路径问题 最短路径问 ...
- 弗洛伊德(Floyd)算法求解图的最短路径
弗洛伊德(Froyd)算法用于求解所有顶点到所有顶点的的最短路径.时间复杂度为O(n^3). 正如我们所知道的,Floyd算法用于求最短路径.Floyd算法可以说是Warshall算法的扩展,三个fo ...
- 最短路:Floyd算法(Python实现)
Floyd-Warshall算法是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权(但不可存在负权回路)的最短路径问题.Floyd算法的根本原理是动态规划. 算法描述 开始:对于每一对顶点 ...
- 蓝桥杯-最短路(floyd算法)
算法训练 最短路 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证没有负环).请你计算从1号点到其他点的最短路(顶点从1到 ...
最新文章
- 小小军团获取服务器配置文件,小小军团2资源攻略 六种办法让你不再缺资源
- system 后门 php,php后门的编写
- vue企业项目demo_基于SpringBoot和Vue的企业级中后台开源项目
- Spring+Mybatis多数据源配置
- 【重难点】【Redis 02】Redis 的持久化、Redis 的主从复制和集群、哨兵
- fiddler之请求过滤(Filters)
- Tensorflow图像调整大小
- C# CLRInsideOut 托管代码与非托管代码互操作,产生相关调用代码的好工具 C++ 头文件转C# 的好工具...
- VS C++ 从字符串中查找字符最后一次出现的位置 strrchr
- 简述Java内存模型的happen before原则
- Android模拟器
- java无头浏览器_PuppeteerSharp无头浏览器.Net Sdk(Puppeteer)
- 程序员需要知道的97件事情之 ------- 谋定而后动
- AI健身,是消费者的伪命题还是资本的好生意?
- xcode6.3 ineligible devices解决方法
- 500台网吧设计方案实验--基于华为模拟器
- 基于归一化互相关函数的语音基音周期检测
- wireshark https 抓包
- 相位相干切换超低相噪多通道信号源解决方案
- 【tm1650调试记录】
热门文章
- 中国这10条逆天公路,火爆外网,你都认识多少?
- 85元一个万能工具箱,配齐24种螺丝刀+扳手,媲美德国工艺,家庭必备
- 国外的幼儿数学竟然这样出题?来测测你的孩子都会做吗?
- 男孩子也是要护肤的!!!
- 惊呆了!竟然还有这样的操作!
- python wx提示框字体_使用wxStyledTextCtrl实现代码提示
- pythonlive2d_Unity-Live2D资源载入
- python 中文编码差异_Python 编码为什么那么蛋疼?
- linux内核分为子系统,Linux内核内存管理子系统分析【转】
- python交通标志识别_YOLOv3目标检测实战:交通标志识别