Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

เส้นทางรวมขั้นต่ำในอาร์เรย์ 3 มิติใน 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}}}

ออก - เส้นทางรวมขั้นต่ำในอาร์เรย์ 3 มิติคือ:15

คำอธิบาย − เราได้ลูกบาศก์ที่มีความยาว กว้าง และสูง ตอนนี้ เราจะคำนวณเส้นทางผลรวมขั้นต่ำในอาร์เรย์ 3 มิติ ดังนั้นจะเริ่มต้นจาก 2 + 4 + 1 + 3 + 5 เช่น 15.

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

ออก - เส้นทางรวมขั้นต่ำในอาร์เรย์ 3 มิติคือ:24

คำอธิบาย − เราได้ลูกบาศก์ที่มีความยาว กว้าง และสูง ตอนนี้ เราจะคำนวณเส้นทางผลรวมขั้นต่ำในอาร์เรย์ 3 มิติ ดังนั้นจะเริ่มตั้งแต่ 1 + 2 + 5 + 16 เช่น 24

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • ป้อนอาร์เรย์ 3 มิติเพื่อสร้างคิวบ์ที่มีค่าประเภทจำนวนเต็ม ส่งข้อมูลไปยังฟังก์ชันเป็น Minimum_SubPath(cube)

  • ภายในฟังก์ชัน Minimum_SubPath(cube)

    • สร้างอาร์เรย์ที่มีขนาดเท่ากับคิวบ์และเริ่มต้น arr[0][0][0] เป็นคิวบ์[0][0][0].

    • เริ่มวนซ้ำ FOR จาก i ถึง 1 จนถึงความยาวของลูกบาศก์และตั้งค่า arr[i][0][0] เป็น arr[i-1][0][0] + cube[i][0][0].

    • เริ่มวนซ้ำ FOR จาก j ถึง 1 จนถึงความกว้างของลูกบาศก์และตั้งค่า arr[0][j][0] เป็น arr[0][j-1][0] + cube[0][j][0]

    • เริ่มวนซ้ำ FOR จาก k ถึง 1 จนถึงความสูงของลูกบาศก์และตั้งค่า arr[0][0][k] เป็น arr[0][0][k-1] + cube[0][0][k]

    • เริ่มการวนซ้ำ FOR จาก i ถึง 1 จนถึงความยาวของคิวบ์ และเริ่มการวนซ้ำ FOR อีกครั้งจาก 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]

    • เริ่มการวนซ้ำ FOR จาก i ถึง 1 จนถึงความยาวของลูกบาศก์ และเริ่มการวนซ้ำ FOR อีกครั้งจาก 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]

    • เริ่มการวนซ้ำ FOR จาก k ถึง 1 จนถึงความสูงของคิวบ์ และเริ่มการวนซ้ำ FOR อีกครั้งจาก 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]

    • เริ่มการวนซ้ำ FOR จาก i ถึง 1 จนถึงความยาวของคิวบ์ และเริ่มลูปอื่น FOR จาก j ถึง 1 จนถึงความกว้างของอาร์เรย์ และเริ่มการวนซ้ำอีกครั้งจาก k ถึง 1 จนถึงความสูงของคิวบ์ และตั้งค่า min_val เป็นค่าต่ำสุด (arr[i-1) ][j][k], arr[i][j-1][k], arr[i][j][k-1]) และ arr[i][j][k] =min_val + ลูกบาศก์[ ผม][j][k]

    • กลับ arr[length-1][breadth-1][height-1]

  • ภายในฟังก์ชัน ขั้นต่ำ (int a, int b, int c)

    • ตรวจสอบว่า 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