图一
如该有向图,我们如何寻求任意最短路径呢?
当然我们可以用深广度优先搜索解决,但是我不会, 我就不多说了
这里我们用到一个Floyd算法来帮助我们解决这个问题
先放代码
for(int i = 0; i < m; i++){ // m 这里指的是边数,即道路数
for(int j = 0; j < m; j++){ //i是中间点的值更新m次
for(int k = 0; k < m; k++){
if(a[j][k] > a[j][i] + a[i][k]){
a[j][k] = a[j][i] + a[i][k];
path[j][k] = i;
}
}
}
}
好,首先我们开两个n*n的表格,
图二
左边的表格表示的是各点相距的距离 右边用-1表示没有取中间点,当被代替时将右侧图改为中间点的值
例如图1中从0到0(本身到本身)的距离是0,所以主对角线全为零
但从图1中可以看出从0到2,要先到1,所以记为无穷
综上所述得到图2 的 表一 表二
当我们遍历完成最上面那个代码的时候,可以得到如下两个数组
于是乎我们就可以在A数组中找到任意两点的最短路径
在path数组中找到中间点啦