求解完全最短路径的Floyd算法

关键词:Floyd算法,动态规划


文章目录

  • 一、算法针对的问题和应用
    • 1.针对问题
    • 2.应用
  • 二、算法介绍
    • 1.一些概念
    • 2.算法讲解
    • 3.伪代码表示
    • 4.一些语言的代码实现
    • 5.一些扩展


以下是本篇文章正文内容


一、算法针对的问题和应用

1.针对问题

完全最短路径问题(all-pairs shortest-paths problem):
给定一个加权连通图(无向的或有向的),找到从每个顶点到其他所有顶点之间的距离(最短路径的长度)

2.应用

(1)通信(基站选址规划)
(2)交通网络
(3)运筹学
(4)计算机游戏(路径规划)

二、算法介绍

1.一些概念

(1)权重矩阵W:有权图的权重矩阵
wij:权重矩阵中第i行第j列,代表从第i个顶点到第j个顶点之间的路径长度。
求解完全最短路径的Floyd算法_第1张图片

(2)距离矩阵D:记录最短路径长度的矩阵(n阶)
dij:距离矩阵中第i行第j列,代表从第i个顶点到第j个顶点之间最的路径长度。
求解完全最短路径的Floyd算法_第2张图片

(3)以下过程里的D(0)、D(1)…D(k),其中k代表:中间顶点的编号不大于k(先看过程再来理解)。

2.算法讲解

(1)k=4

过程 详解
求解完全最短路径的Floyd算法_第3张图片 这个矩阵说明:不包含中间顶点(此时的k=0)的最短路径长度。【在框住的内容里,有 {b–>a,a–>c}=5,{d–>a,a–>c}=9,这是要为D(1)进行更新的内容,见下图】
求解完全最短路径的Floyd算法_第4张图片 这个矩阵说明:中点顶点(此时只有a)的编号不大于1(此时的k=1)的最短路径长度。【在框住的内容里,有{c–>b,b–>a}=9,{c–>b,b–>c}=12>0,故在D(2)只更新c–>a】
求解完全最短路径的Floyd算法_第5张图片 这个矩阵说明:中间顶点(此时为a和b)的编号不大于2(此时的k=2)的最短路径长度。【在框住的内容里,有{a–>c,c–>b}=10,{a–>c,c–>d}=4,{b–>c,c–>d}=6,{d–>c,c–>b}=16,故在D(3)要更新a–>b,a–>d,b–>d,d–>b四条】
求解完全最短路径的Floyd算法_第6张图片 这个矩阵说明:中间顶点(此时为a、b和c)的编号不大于3(此时的k=3)的最短路径长度。【在框住的内容里,有{c–>d,d–>a}=7<9,故在D(4)要更新c–>a】
求解完全最短路径的Floyd算法_第7张图片 这个矩阵说明:中间顶点(此时为a、b、c和d)的编号不大于4(此时的k=4)的最短路径长度。过程结束。

3.伪代码表示

算法:Floyd(W[1..n,1..n])
//实现计算完全最短路径的Floyd算法
//输入:不包含长度为负的回路的图的权重矩阵W
//输出:包含最短路径长度的距离矩阵
D<--W
for k<--1 to n do
	for i<--1 to n do
		for j<--1 to n do
			D[i,j] <-- min{D[i,j],D[i,k]+D[k,j]} 
return D

4.一些语言的代码实现

【待完善】

5.一些扩展

(1)加强Floyd算法,使得该算法能求出最短路径本身,不仅仅是最短路径得长度。
【待完善,似乎是再定义一个矩阵P】

本文是作者在学习数据结构、算法设计与分析课程时,结合自己理解所写的,如有错误或补充,请在评论区留言。

你可能感兴趣的:(算法设计与分析,算法,图论,数据结构)