动态规划在求解全源最短路径中的应用(JAVA)--Floyd算法
参考图论算法(二)-最短路径的Dijkstra [ 单源 ] 和Floyd[ 多源 ] 解法(JAVA )
对于一个带权图(无向或有向),全源最短路径问题就是找出每个顶点到其他所有顶点之间的最短距离。我们用一个n阶距离矩阵来记录最短路径的长度。需要注意的是该算法不适合带负权的回路图。
那么对于任意i到j的路径可以表示为:vi, 顶点标号不大于k的一个中间顶点集,vj
我们在把这种路径分成两个不相交的情况,
情况一:子集中不将第k个顶点作为中间顶点。在这种情况下,路径所包含的中间顶点的编号都不大于k-1;
情况二:子集中不将第k个顶点作为中间顶点。在这种情况下,顶点vk在中间顶点中,且出现过一次。
上述两种情况可以由下图表示:
下面是一个实例用来展示算法的过程:
Input:
4 5
1 3 3
2 1 2
3 2 7
4 1 6
3 4 1
Output:
0 10 3 4
2 0 5 6
7 7 0 1
6 16 9 0
完整代码如下:
import java.util.Scanner;public class minPath {static int[][] e = new int[10][10];static int n, m;static Scanner input = new Scanner(System.in);public static void main(String[] args) {n = input.nextInt();m = input.nextInt();for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (i == j) {e[i][j] = 0;} else {e[i][j] = 99999999;}}}for (int i = 1; i <= m; i++) {int a = input.nextInt();int b = input.nextInt();int c = input.nextInt();e[a][b] = c;}floyd();for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {System.out.print(e[i][j] + " ");}System.out.println();}}public static void floyd() {for (int k = 1; k <= n; k++) {for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {if (e[i][j] > e[i][k] + e[k][j]) {e[i][j] = e[i][k] + e[k][j];}}}}}
}
动态规划在求解全源最短路径中的应用(JAVA)--Floyd算法相关推荐
- Johnson 全源最短路径算法 Java实现
Johnson 全源最短路径算法 Java实现 算法导入 算法核心 复杂度分析 时间复杂度 空间复杂度 代码实现 参考资料 End 算法导入 在之前的文章中,我们讲述了: 经典入门的Dijkstra算 ...
- 图论-全源最短路径-对比Floyd算法与暴力Dijkstra算法
题目 输入顶点数N,有向边数M,接下来M行输入格式为u,v,w分别代表两个顶点u,v和两点之间边的权值w.输出全源最短路径 输入样例: 6 8 0 1 1 0 3 4 0 4 4 1 3 2 2 5 ...
- 全源最短路径之弗洛伊德算法(C语言)
Floyd(弗洛伊德)算法 该算法是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权(但不可存在负权回路)的最短路径问题,同时也被用于计算有向图的传递闭包. 时间复杂度为 O(N^3) 空 ...
- Dijkstra算法求解单源最短路径问题
文章目录 一 前言 二 Dijkstra 算法讲解 1. 贪心算法的证明 2. 算法实现说明 3. 初版Dijkstra算法代码 三 时间复杂度优化 1. 优化策略 2. 优化后的代码 四 结语 一 ...
- 单源最短路径问题——分支限界法(Java)
1. 前置芝士 1.1 分支限界法求解目标 分支限界法与回溯法的不同求解目标: 回溯法的求解目标:找出解空间树中满足约束条件的所有解: 分支限界法的求解目标:找出满足约束条件的一个解,或是在满足约束条 ...
- 单源最短路径-Dijkstra(迪杰斯特拉算法)
迪杰斯特拉算法时间复杂度为O(n^2),其中n为顶点个数. 该算法用于求单源最短路径.并且图中的边不允许带负权值. #include <iostream> using namespace ...
- (单源最短路径)一文搞懂dijkstra算法
前言 大家好,我是bigsai,今天给大家讲讲Dijkstra算法,下次拿着这个算法找女神少绕路,有女朋友的可以试试行不行的通. 对于Dijkstra算法,很多人可能感觉熟悉而又陌生,可能大部分人比较 ...
- 单源最短路径的迪克斯特拉(Dijkstra)算法
Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点(节点需为源点)到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展 ...
- 享元模式在JDK源码中的应用——Java设计模式系列学习笔记
1. String中的享元模式 Java中将String类定义为final(不可改变的),JVM中字符串一般保存在字符串常量池中,java会确保一个字符串在常量池中只有一个拷贝,这个字符串常量池在JD ...
最新文章
- AQS理解之三,由刚才写的锁转变成一个公平锁
- 那些被大数据时代抛弃的人
- java 工具箱安装方法,Java工具包的安装配置和使用-JSP教程,Java技巧及代码
- BZOJ3190[JLOI2013] 赛车
- dscms源码分析笔记
- 利用Python处理Excel数据
- jsp js弹出网页对话框
- 对计算机硬盘格式化,电脑硬盘格式化和快速格式化的区别
- 国产数据库--HighGo DB(瀚高数据库)
- phpcms v9 站内外搜索代码
- vs2010中正确加载gif格式图片
- 高大上的数据可视化图表,只需6步就能完成
- 计算机语言里的堆栈是什么意思,汇编语言中的堆栈是什么?
- 【Python】Matplotlib画图(七)——线的颜色、点的形状
- 微软宣布Windows10即将迎来重大更新,Windows 11要来了?
- android 4.4 art模式,安卓4.4的ART模式怎么打开 安卓4.4开启art模式方法图解
- STM32F407 电机编码器测量
- 人脸检测SRN网络笔记
- OBS 基础10 录制视频
- 添加arm系列相关的cross compile toolchain
热门文章
- 中蜂几月份自然分蜂_蜜蜂什么时候自然分蜂?
- HTML+CSS+JS实现 ❤️彩色3D线条动画特效❤️
- 一个控制器2套模版php,如何不用一个自定义的控制器渲染一个模板
- easyexcel多个sheet导入_Java中Easypoi实现excel多sheet表导入导出功能
- html5 视频路径加密,HTML5视频路径混淆
- 计算机网络硬件脆弱性,计算机网络的脆弱性有哪几点
- IDEA里的web.xml页面的Servlet名称报错下方出现红色下划线
- 专业音频如何把电平转换成dbu_谭俊峰|录课、买麦,你应该了解的音频常识
- 【youcans 的 OpenCV 例程 200 篇】112. 滤波反投影重建图像
- 【OpenCV 例程200篇】07. 图像的创建(np.zeros)