floyd算法新理解
设\(f_{k,i,j}\)表示从\(i\to j\)经过编号不超过\(k\)(\(i,j\)编号可以超过\(k\))的节点的最短路。
转移方程有两种。
1.\(f_{k,i,j}=\min(f_{k-1,i,j})\),意义是\(i\to j\)不经过\(k\)。
2.\(f_{k,i,j}=\min(f_{k-1,i,k}+f_{k-1,k,j})\),意义是\(i\to j\)经过\(k\)。
时间/空间复杂度\(O(n^3)\)
事实上,如果把第一维滚动掉,空间就优化到\(O(n^2)\)