C++中三維陣列的最小路徑和


我們得到一個立方體,可以用三維陣列表示為cube[length][breadth][height]。任務是計算遍歷立方體所能達到的最小路徑和,並列印結果。

讓我們看看這個的各種輸入輸出場景 -

輸入 − int cube[length][breadth][height] = { { {2, 4, 1}, {3, 4, 5}, {9, 8, 7}}, { {5, 3, 2}, {7, 6, 5}, {8, 7, 6}}, { {3, 2, 1}, {4, 3, 2}, {5, 4, 3}}}

輸出  − 三維陣列的最小路徑和為:15

解釋 − 我們得到一個具有長度、寬度和高度的立方體。現在,我們將計算三維陣列中的最小路徑和。所以,它將從 2 + 4 + 1 + 3 + 5 即 15 開始。

輸入 − int cube[length][breadth][height] = { { {1, 2}, {7, 8}}, { {3, 5}, {9, 16}}}

輸出 − 三維陣列的最小路徑和為:24

解釋 − 我們得到一個具有長度、寬度和高度的立方體。現在,我們將計算三維陣列中的最小路徑和。所以,它將從 1 + 2 + 5 + 16 即 24 開始。

下面程式中使用的方法如下

  • 輸入一個三維陣列來形成一個具有整數值的立方體。將資料作為 Minimum_SubPath(cube) 傳遞給函式。

  • 在函式 Minimum_SubPath(cube) 內部

    • 建立一個與立方體大小相同的陣列,並將 arr[0][0][0] 初始化為 cube[0][0][0]。

    • 從 i=1 開始迴圈到立方體的長度,並將 arr[i][0][0] 設定為 arr[i-1][0][0] + cube[i][0][0]。

    • 從 j=1 開始迴圈到立方體的寬度,並將 arr[0][j][0] 設定為 arr[0][j-1][0] + cube[0][j][0]

    • 從 k=1 開始迴圈到立方體的高度,並將 arr[0][0][k] 設定為 arr[0][0][k-1] + cube[0][0][k]

    • 從 i=1 開始迴圈到立方體的長度,再從 j=1 開始迴圈到陣列的寬度,並將 min_val 設定為 Minimum(arr[i-1][j][0], arr[i][j-1][0], INT_MAX),並將 arr[i][j][0] 設定為 min_val + cube[i][j][0]

    • 從 i=1 開始迴圈到立方體的長度,再從 k=1 開始迴圈到陣列的高度,並將 min_val 設定為 Minimum(arr[i-1][0][k], arr[i][0][k-1], INT_MAX),並將 arr[i][0][k] = min_val + cube[i][0][k]

    • 從 k=1 開始迴圈到立方體的高度,再從 j=1 開始迴圈到陣列的寬度,並將 min_val 設定為 Minimum(arr[0][j][k-1], arr[0][j-1][k], INT_MAX),並將 arr[0][j][k] = min_val + cube[0][j][k]

    • 從 i=1 開始迴圈到立方體的長度,再從 j=1 開始迴圈到陣列的寬度,再從 k=1 開始迴圈到立方體的高度,並將 min_val 設定為 Minimum(arr[i-1][j][k], arr[i][j-1][k], arr[i][j][k-1]),並將 arr[i][j][k] = min_val + cube[i][j][k]

    • 返回 arr[length-1][breadth-1][height-1]

  • 在函式 Minimum(int a, int b, int c) 內部

    • 檢查 IF a 小於 b 且 a 小於 c,則返回 a。

    • 否則,返回 c

    • 否則 IF,b 小於 c,則返回 b

    • 否則,返回 c

示例

#include<bits/stdc++.h>
using namespace std;
#define length 3
#define breadth 3
#define height 3

int Minimum(int a, int b, int c){
   if(a < b){
      if(a < c){
         return a;
      }
      else{
         return c;
      }
   }
   else if(b < c){
      return b;
   }
   else{
      return c;
   }
}
int Minimum_SubPath(int cube[][breadth][height]){
   int i, j, k;
   int arr[length][breadth][height];
   arr[0][0][0] = cube[0][0][0];

   for(i = 1; i < length; i++){
      arr[i][0][0] = arr[i-1][0][0] + cube[i][0][0];
   }
   for(j = 1; j < breadth; j++){
      arr[0][j][0] = arr[0][j-1][0] + cube[0][j][0];
   }
   for(k = 1; k < height; k++){
      arr[0][0][k] = arr[0][0][k-1] + cube[0][0][k];
   }
   for(i = 1; i < length; i++){
      for(j = 1; j < breadth; j++){
         int min_val = Minimum(arr[i-1][j][0], arr[i][j-1][0], INT_MAX);
         arr[i][j][0] = min_val + cube[i][j][0];
      }
   }
   for(i = 1; i < length; i++){
      for(k = 1; k < height; k++){
         int min_val = Minimum(arr[i-1][0][k], arr[i][0][k-1], INT_MAX);
         arr[i][0][k] = min_val + cube[i][0][k];
      }
   }
   for(k = 1; k < height; k++){
      for(j = 1; j < breadth; j++){
         int min_val = Minimum(arr[0][j][k-1], arr[0][j-1][k], INT_MAX);
         arr[0][j][k] = min_val + cube[0][j][k];
      }
   }
   for(i = 1; i < length; i++){
      for(j = 1; j < breadth; j++){
         for(k = 1; k < height; k++){
            int min_val = Minimum(arr[i-1][j][k], arr[i][j-1][k], arr[i][j][k-1]);
            arr[i][j][k] = min_val + cube[i][j][k];
         }
      }
   }
   return arr[length-1][breadth-1][height-1];
}
int main(){
   int cube[length][breadth][height] = { { {2, 4, 1}, {3, 4, 5}, {9, 8, 7}},
      { {5, 3, 2}, {7, 6, 5}, {8, 7, 6}},
      { {3, 2, 1}, {4, 3, 2}, {5, 4, 3}}};
   cout<<"Minimum Sum Path In 3-D Array are: "<<Minimum_SubPath(cube);
   return 0;
}

輸出

如果我們執行上述程式碼,它將生成以下輸出

Minimum Sum Path In 3-D Array are: 15

更新於:2021年10月22日

104 次檢視

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.