最短路径两个最基础的算法之一,用于求多源最短路径。
其实就是三个循环套在里面,但是很难理解。
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(mp[i][j]>mp[i][k]+mp[k][j])
mp[i][j]=mp[i][k]+mp[k][j];
看成两个循环就好了,最外面的循环控制每次路径缩小的点,即若是i,j之间存在一点x,且路径短,则i,j路径等于较短路径。
内部两个循环就是单纯搜寻i,j。
例如 存在1-----4和1-2-3-4两个路径
第一次搜寻1,不存在
第二次搜寻2,有1 3,那么如果路径相比之下较短就简化为1 3 ,也就是说现在新建了1 3这条路径
第三次搜寻3 有 就有了2 4 和 1 4,所以就出来了1—4的最短路径
每次都把k值有关的点给最短化路径,那么整个n执行完之后,整个图里都是最短路径。