首先,个人感觉起来,在四大最短路算法中,Floyd是最简单的,也是最好理解的,但是严重受时间和空间的限制。存图方式为二维数组。
复杂度:T:O(n^3) M:O(n^2)
思路:O(1)
核心思想:
主题部分通过三个for循环(分别代表中点,起始点,目标点),通过每局来进行松弛操作,不断更新两点之间的最短路径。但是要注意循环的顺序:中点在第一层,点对在二、三层。使用dp的思想
,更新 map[i][j]=min(map[i][j],map[i][k]+map[k][j])
核心代码:
for(int k=1;k<=n;++k) for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) { map[i][j]=min(map[i][j],map[i][k]+map[k][j]); }