弗洛伊德算法求出最短距离

如题所述

(1)利用二维数组dist[i][j]记录当前vi到vj的最短路径长度,数组dist的初值等于图的带权邻接矩阵; 


(2)集合S记录当前允许的中间顶点,初值S=Φ;


(3)依次向S中加入v0 ,v1… vn-1,每加入一个顶点,对dist[i][j]进行一次修正:设S={v0 ,v1… vk-1},加入vk,则dist(k)[i][j] = min{ dist(k-1)[i][j],dist(k-1)[i][k]+dist(k-1)[k][j]}。 

dist(k)[i][j]的含义:允许中间顶点的序号最大为k时从vi到vj的最短路径长度。
dist(n-1)[i][j]就是vi到vj的最短路径长度。



弗洛伊德最短距离算法(Floyd Shortest Path Algorithm)又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。
中文名   弗洛伊德最短距离算法
外文名   FloydShortest Path Algorithm
所属学科    IT
所属领域   程序设计
简介
最短路问题是网络最优化中一个基本而又非常重要的问题,这一问题相对比较简单,在实际生产和生活中经常遇到,许多的网络最优化问题可以化为最短路问题,或者用最短路算法作为其子程序.因此,最短路的用途已远远超出其表面意义迄今为止,所有最短路算法都只对不含负回路的网络有效,实际上对含有负回路的网络,其最短路问题是NP困难的,因此本研究所讨论的网络也不含负回路.此外,如果将无向图每条边用两条端点相同、方向相反的弧来代替,可以将其化为有向图,因而不讨论无向图.本研究中未述及的术语、记号。
Floyd算法是一种用于寻找给定加权图中顶点间最短路径的算法,以1978年图灵奖获得者斯坦福大学计算机科学系教授RobertW.Floyd命名。Floyd算法采用动态规划的原理计算两两顶点间最短路径,主要解决网络路由寻找最优路径的问题。

温馨提示:答案为网友推荐,仅供参考