**
Floyd算法求解多元最短路径问题
**
问题描述:
对于多个目标地A,B,C…,求解两地之间的最短路径问题,例如求解 A-C的距离,常见的解有两种,一种是直接由A-C,另一种是经过某个中转地再到达目的地,即A-B-C,其中中转地可以是n个。
floyd算法解释:
floyd算法的核心思想是将多地间的距离构建为一个距离矩阵(即二维数组),然后再通过遍历方法,刷新距离矩阵,下面通过一组实例来解释:
例如有A,B,C,D四个目标地点,其相互间的距离为矩阵中所示,
其中4行1列的“7”,与1行4列的“7”,均表示由A-D的距离为7,但是我们发现,若需要从A地去D地,若途径C地,需要“1”步,再由C去D,需要“5”步,则采用A-C-D的路线,共需要“6”步,最短路径的问题从而产生。所以算法的思想就是,遍历找到合适的中转点,使得由出发地去目的地的路程最短。
算法实现:
step1、建立原始距离矩阵:
int map[4][4] = {
0,4,1,7,
4,0,2,3,
1,2,0,5,
7,3,5,0
};
step2、floyd遍历实现:
for(mid = 0 ; mid < 4 ; mid++)
{
for(start = 0 ; start <