路径优化的Floyd,dijkstra,A*算法的matlab代码路径优化的Floyd,dijkstra,A*算法的matlab代码附件:Astar
zip附件:dijkstra
zip附件:FloydSPR2007-11-917:41#1hgc13工程师精华0积分63帖子105水位210技术分0状态离线Floyd最短路径算法2006-10-20,byleon_jlu在图论中经常会遇到这样的问题,在一个有向图里,求出任意两个节点之间的最短距离
我们在离散数学、数据结构课上都遇到过这个问题,在计算机网络里介绍网络层的时候好像也遇到过这个问题,记不请了
但是书本上一律采取的是Dijkstra算法,通过Dijkstra算法可以求出单源最短路径,然后逐个节点利用Dijkstra算法就可以了
不过在这里想换换口味,采取RobertFloyd提出的算法来解决这个问题
下面让我们先把问题稍微的形式化一下:如果有一个矩阵D=[d(ij)],其中d(ij)>0表示i城市到j城市的距离
若i与j之间无路可通,那么d(ij)就是无穷大
又有d(ii)=0
编写一个程序,通过这个距离矩阵D,把任意两个城市之间的最短与其行径的路径找出来
我们可以将问题分解,先找出最短的距离,然后在考虑如何找出对应的行进路线
如何找出最短路径呢,这里还是用到动态规划的知识,对于任何一个城市而言,i到j的最短距离不外乎存在经过i与j之间的k和不经过k两种可能,所以可以令k=1,2,3,
,n(n是城市的数目),在检查d(ij)与d(ik)+d(kj)的值;在此d(ik)与d(kj)分别是目前为止所知道的i到k与k到j的最短距离,因此d(ik)+d(kj)就是i到j经过k的最短距离
所以,若有d(ij)>d(ik)+d(kj),就表示从i出发经过k再到j的距离要比原来的i到j距离短,自然把i到j的d(ij)重写为