- 博客(0)
- 资源 (2)
- 收藏
- 关注
Floyd算法详解
floyd算法讲解,实例代码分析
Floyd算法的基本思想:
可以将问题分解,先找出最短的距离,然后在考虑如何找出对应的行进路线。如何找出最短路径呢,这里还是用到动态规划的知识,对于任何一个城市而言,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)重写为d(ik)+d(kj),每当一个k查完了,d(ij)就是目前的i到j的最短距离。重复这一过程,最后当查完所有的k时,d(ij)里面存放的就是i到j之间的最短距离了。
······
下面是具体的C代码:
#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
#define MAXSIZE 20
void floyd(int [][MAXSIZE], int [][MAXSIZE], int);
void display_path(int [][MAXSIZE], int [][MAXSIZE], int);
void reverse(int [], int);
void readin(int [][MAXSIZE], int *);
#define MAXSUM(a, b) (((a) != INT_MAX && (b) != INT_MAX) ? \
((a) + (b)) : INT_MAX)
······
2012-08-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人