最短路径——Floyd算法
时间:2020-06-30
本文章向大家介绍
最短路径——Floyd算法
,主要包括
最短路径——Floyd算法
使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
最短路径——Floyd算法
可以用来求带权图和无权图
Floyd算法:求出每一对顶点之间的最短路径
使用动态规划思想,将问题的求解分为多个阶段
第一个矩阵就是图的邻接矩阵
第二个矩阵表示两个顶点之间的中转点
遍历上一个阶段留下来的矩阵A,对于上一个矩阵A当中的每一个具体的元素我们都进行:
若 A^(k-1)[i] [j]>A^(k-1)[i] [k]+A^(k-1)[k] [j]
则 A^(k)[i] [j] = A^(k-1)[i] [k] + A^(k-1)[k] [j];
path^(k)[i] [j] = k
否则A^(k) 和 path^(k)保持原值
\[A^{(-1)}[2] [1]>A^{(-1)}[2] [0]+A^{(-1)}[0] [1]=11
\]
\[A^{(0)}[2] [1] = 11;
\]
\[path^{(0)}[2] [1] = 0;
\]
\[A^{(0)}[0] [2]>A^{(0)}[0] [1]+A^{(0)}[1] [2]=10
\]
\[A^{(1)}[0] [2] = 10;
\]
\[path^{(1)}[0] [2] = 1;
\]
\[A^{(1)}[1] [0]>A^{(1)}[1] [2]+A^{(1)}[2] [0]=9
\]
\[A^{(2)}[1] [0] = 9;
\]
\[path^{(2)}[1] [0] = 2;
\]
Floyd算法核心代码
//。。。。准备工作,初始化矩阵A和path
for(int k=0;k<n;k++){ //考虑以vk作为中转点
for(int i=0;i<n;i++){ //遍历整个矩阵,i为行号,j为列号
for(int j=0;j<n;j++){
if(A[i][j]>A[i][k]+A[k][j]){ //以vk作为中转点的路径更短
A[i][j] = A[i][k]+A[k][j]; //更新最短路径长度
path[i][j] = k; //中转点
}
}
}
}
Floyd算法实例
练习:floyd算法用于负权图
//。。。。准备工作,初始化矩阵A和path
for(int k=0;k<n;k++){ //考虑以vk作为中转点
for(int i=0;i<n;i++){ //遍历整个矩阵,i为行号,j为列号
for(int j=0;j<n;j++){
if(A[i][j]>A[i][k]+A[k][j]){ //以vk作为中转点的路径更短
A[i][j] = A[i][k]+A[k][j]; //更新最短路径长度
path[i][j] = k; //中转点
}
}
}
}
不能解决的问题
带有“负权值回路”的图
这种图可能没有最短路径
知识回顾
原文地址:https://www.cnblogs.com/jev-0987/p/13213497.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 用Python爬取淘宝4403条大裤衩数据进行分析,终于找到可以入手的那一条
- Python 微信机器人:属于自己的微信机器人制作,简单易懂。图灵机器人接口api调用。
- 最全总结:把模块当做脚本来执行的 7 种案例及其原理
- 经典八种排序算法总结(带动画演示)
- bokeh作图过程报错解决方法兼Pycharm如何升级安装包的方法
- 一、html 基础
- 二、css3基础
- 三. CSS layout(布局)
- 四. css 布局之 float
- Python+selenium 自动化-读取excel记录的脚本执行登陆操作实战演示
- 详细讲解!从JVM直到类加载器
- PyQt5 图形界面-实现按钮监听事件
- Python 技术篇-文件操作:文件的读取和写入
- Salesforce Javascript(一) Promise 浅谈
- Python 技巧篇-英文单词首字母大小写转换功能实例演示,字符串切片实现