কম্পিউটার টিউটোরিয়াল

C++-এ ৩-D অ্যারেতে ন্যূনতম যোগফল পাথ

আমাদের একটি কিউব দেওয়া আছে যেটি একটি ৩-D অ্যারে হিসেবে 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}}}

আউট - ৩-D অ্যারেতে ন্যূনতম যোগফল পাথ: 15

ব্যাখ্যা - আমাদের একটি কিউব দেওয়া আছে যাতে দৈর্ঘ্য, প্রস্থ এবং উচ্চতা রয়েছে। এখন আমরা ৩-D অ্যারেতে ন্যূনতম যোগফল পাথ গণনা করব। সেটি 2 + 4 + 1 + 3 + 5 = 15 থেকে শুরু হবে।

ইন - int cube[length][breadth][height] = { { {1, 2}, {7, 8}}, { {3, 5}, {9, 16}}}

আউট - ৩-D অ্যারেতে ন্যূনতম যোগফল পাথ: 24

ব্যাখ্যা - আমাদের একটি কিউব দেওয়া আছে যাতে দৈর্ঘ্য, প্রস্থ এবং উচ্চতা রয়েছে। এখন আমরা ৩-D অ্যারেতে ন্যূনতম যোগফল পাথ গণনা করব। সেটি 1 + 2 + 5 + 16 = 24 থেকে শুরু হবে।

নিচের প্রোগ্রামে ব্যবহৃত পদ্ধতি

  • পূর্ণসংখ্যা টাইপের মান 지닌 একটি ৩-D অ্যারে ইনপুট নিন কিউব তৈরি করতে। ডেটা Minimum_SubPath(cube) ফাংশনে পাস করুন।
  • Minimum_SubPath(cube) ফাংশনের ভিতরে:
    • কিউবের আকারের সমান একটি অ্যারে তৈরি করুন এবং arr[0][0][0]-কে cube[0][0][0]-এ ইনিশিয়ালাইজ করুন।
    • i = ১ থেকে কিউবের দৈর্ঘ্য পর্যন্ত একটি FOR লুপ শুরু করুন এবং arr[i][0][0] = arr[i-1][0][0] + cube[i][0][0] সেট করুন।
    • j = ১ থেকে কিউবের প্রস্থ পর্যন্ত একটি FOR লুপ শুরু করুন এবং arr[0][j][0] = arr[0][j-1][0] + cube[0][j][0] সেট করুন।
    • k = ১ থেকে কিউবের উচ্চতা পর্যন্ত একটি FOR লুপ শুরু করুন এবং arr[0][0][k] = arr[0][0][k-1] + cube[0][0][k] সেট করুন।
    • i = ১ থেকে দৈর্ঘ্য পর্যন্ত এবং j = ১ থেকে প্রস্থ পর্যন্ত একটি নেস্টেড FOR লুপ শুরু করুন এবং 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 = ১ থেকে দৈর্ঘ্য পর্যন্ত এবং k = ১ থেকে উচ্চতা পর্যন্ত একটি নেস্টেড FOR লুপ শুরু করুন এবং 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 = ১ থেকে উচ্চতা পর্যন্ত এবং j = ১ থেকে প্রস্থ পর্যন্ত একটি নেস্টেড FOR লুপ শুরু করুন এবং 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 = ১ থেকে দৈর্ঘ্য, j = ১ থেকে প্রস্থ, k = ১ থেকে উচ্চতা পর্যন্ত তিনটি নেস্টেড FOR লুপ শুরু করুন এবং 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 রিটার্ন করুন।
    • ELSE 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 
  1. C++-এ পাথ সম III

  2. C++ সম অ্যারে পাজল (Sum Array Puzzle)

  3. C++-এ সম অ্যারে পাজল (Sum Array Puzzle) সমাধান

  4. পাইথনে মিনিমাম পাথ সম বের করুন