python、lingo、matlab实现弗洛伊德(Floyd)算法

您所在的位置:网站首页 lingo求解最短路径距离 python、lingo、matlab实现弗洛伊德(Floyd)算法

python、lingo、matlab实现弗洛伊德(Floyd)算法

2024-07-11 23:11:06| 来源: 网络整理| 查看: 265

引言

Floyd算法是一个经典的动态规划算法。是解决任意两点间的最短路径(称为多源最短路径问题)的一种算法,可以正确处理有向图或负权的最短路径问题。

Floyd 算法是一个基于「贪心」、「动态规划」求一个图中所有点到取余各点最短路径的算法。

目录

引言

问题描述

最短路径问题

算法思想 

操作步骤

实现过程

代码实现

python实现如下

 matlab实现如下

lingo实现如下

问题描述 最短路径问题

最短路径问题一直是图论研究的热点问题。例如在实际生活中的路径规划、地图导航等领域有重要的应用。关于求解图的最短路径方法也层出不穷,本篇文章将详细讲解图的最短路径算法。最短路径问题的背景问题一般是类似:已知各城市之间距离,请给出从城市A到城市B的最短行车方案 or 各城市距离一致,给出需要最少中转方案。简而言之:固定起始点的情况下,求最短路。

 

算法思想 

首先根据图将各个点与其余各点的距离写成矩阵的形式,依次将各个点作为中转点进行迭代,重新计算各个点与其余各点的最小距离,直至迭代点总数次,此时各点到其余各点的距离就是点到其余各点的最小路径。

操作步骤

为了计算方便,令网络的权矩阵为D= \left ( d_{ij} \right )_{n\times n}l_{ij}v_{i}v_{j}的距离。

其中

(1)输入权矩阵D^{\left ( k \right )}= D

(2)计算D^{\left ( k \right )}= \left ( d_{ij}^{\left ( k \right )} \right )_{n\times n} \left ( k=1,2,3,...,n \right )        其中d_{ij}^{k}=min\left [ d_{ij}^{k-1},d_{ik}^{k-1} +d_{kj}^{k-1}\right ]

(3)D^{\left ( n \right )}= \left ( d_{ij}^{\left ( n \right )} \right )_{n\times n}中的元素d_{ij}^{\left ( n \right )}就是v_{i}v_{j}的最短路长。

实现过程

(1)根据图将各个点与其余各点的距离写成矩阵的形式。

这里的“1000”是指本身v_{i}v_{j}是没有路径的应该标为无穷但是为了方便我们进行计算,这里使用1000代替无穷。

 (2)将v_{1}点作为中转点进行迭代,重新计算各个点与其余各点的最小距离。

 (3)将v_{2}点作为中转点进行迭代,重新计算各个点与其余各点的最小距离。

 (4)将v_{3}点作为中转点进行迭代,重新计算各个点与其余各点的最小距离。

 (5)将v_{4}点作为中转点进行迭代,重新计算各个点与其余各点的最小距离。 

  (6)将v_{5}点作为中转点进行迭代,重新计算各个点与其余各点的最小距离。 

  (7)将v_{6}点作为中转点进行迭代,重新计算各个点与其余各点的最小距离。  

 

 (7)将v_{7}点作为中转点进行迭代,重新计算各个点与其余各点的最小距离。  

 我们可以比较容易从图中观察出各点到其余点的最短路径。

代码实现 python实现如下 class Graph: def __init__(self,num): self.data_li = [[1000 for i in range(num)] for i in range(num)] def add_edge(self, data): # 记录各点到可到达的其余点的路径长度 for i in data: self.data_li[i[0]][i[1]] = i[2] def floyd(self,num): for i in range(1,num): for j in range(num): for k in range(num): if self.data_li[j][k] > self.data_li[j][i] + self.data_li[i][k]: self.data_li[j][k] = self.data_li[j][i] + self.data_li[i][k] return self.data_li if __name__ == '__main__': data = [(0,1,10),(1,0,10),(0,2,7),(0,3,8),(1,2,2),(1,4,6),(2,3,3),(2,4,9),(2,5,9),(3,5,5),(4,6,20),(5,4,2),(5,6,30),(2,0,7),(3,0,8),(2,1,2),(4,1,6),(3,2,3),(4,2,9),(5,2,9),(5,3,5),(6,4,20),(4,5,2),(6,5,30),(0,0,0),(1,1,0),(2,2,0),(3,3,0),(4,4,0),(5,5,0),(6,6,0)] d = Graph(7) d.add_edge(data) for i in d.floyd(7): print(i)  matlab实现如下

data_li = xlsread("C:\Users\24453\Desktop\数学建模题\Dijkstra.xlsx",1,'$A$1:$G$7'); num = 7; data = floyd(num,data_li); function data = floyd(num,data_li) for i = 2:num for j = 1:num for k = 1:num if data_li(j,k) > data_li(j,i) + data_li(i,k) data_li(j,k) = data_li(j,i) + data_li(i,k); end end end end data = data_li; end lingo实现如下



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭