floyd算法
求解最优化问题都能从集合角度进行分析-> 闫氏DP分析法
原理基于动态规划 f[k][i][j]:从i走到j中间经过若干个编号不超过k的点的最小距离
转化就是看k这个点选不选 不选就是 f[k - 1][i][j];选的话就是f[k - 1][i][k] + f[k - 1][k][j];
f[k][i][j] = min(f[k - 1][i][j], f[k - 1][i][k] + f[k - 1][k][j]);
for(int k = 0; k < n; k ++)
for(int i = 0; i < n; i ++)
for(int j = 0; j < n; j ++)
f[i][j] = min(f[i][j], f[i][k] + f[k][j]);
优化掉第一维度原因:
假如k = i, f[k][j] = min(f[k][j], f[k][k] + f[k][j]);因为f[k][k] = 0, 所以f[k][j] 不变
同理当k = j 时 f[i][j]也不会被更新因此 第一维度直接砍掉不影响正确性。