替换图片链接
This commit is contained in:
@@ -155,7 +155,7 @@ grid[i][j][k] = m,表示 节点i 到 节点j 以[1...k] 集合为中间节点
|
||||
|
||||
grid数组是一个三维数组,那么我们初始化的数据在 i 与 j 构成的平层,如图:
|
||||
|
||||

|
||||

|
||||
|
||||
红色的 底部一层是我们初始化好的数据,注意:从三维角度去看初始化的数据很重要,下面我们在聊遍历顺序的时候还会再讲。
|
||||
|
||||
@@ -202,7 +202,7 @@ vector<vector<vector<int>>> grid(n + 1, vector<vector<int>>(n + 1, vector<int>(n
|
||||
|
||||
所以遍历k 的for循环一定是在最外面,这样才能一层一层去遍历。如图:
|
||||
|
||||

|
||||

|
||||
|
||||
至于遍历 i 和 j 的话,for 循环的先后顺序无所谓。
|
||||
|
||||
@@ -234,7 +234,7 @@ for (int i = 1; i <= n; i++) {
|
||||
|
||||
此时就遍历了 j 与 k 形成一个平面,i 则是纵面,那遍历 就是这样的:
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
而我们初始化的数据 是 k 为0, i 和 j 形成的平面做初始化,如果以 k 和 j 形成的平面去一层一层遍历,就造成了 递推公式 用不上上一轮计算的结果,从而导致结果不对(初始化的部分是 i 与j 形成的平面,在初始部分有讲过)。
|
||||
@@ -253,7 +253,7 @@ for (int i = 1; i <= n; i++) {
|
||||
|
||||
就是图:
|
||||
|
||||

|
||||

|
||||
|
||||
求节点1 到 节点 2 的最短距离,运行结果是 10 ,但正确的结果很明显是3。
|
||||
|
||||
@@ -267,7 +267,7 @@ for (int i = 1; i <= n; i++) {
|
||||
|
||||
而遍历k 的for循环如果放在中间呢,同样是 j 与k 行程一个平面,i 是纵面,遍历的也是这样:
|
||||
|
||||

|
||||

|
||||
|
||||
同样不能完全用上初始化 和 上一层计算的结果。
|
||||
|
||||
@@ -283,7 +283,7 @@ for (int i = 1; i <= n; i++) {
|
||||
|
||||
图:
|
||||
|
||||

|
||||

|
||||
|
||||
求 节点1 到节点3 的最短距离,如果k循环放中间,程序的运行结果是 -1,也就是不能到达节点3。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user