Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सी++ में 3-डी सरणी में न्यूनतम योग पथ

हमें एक क्यूब दिया गया है जिसे क्यूब [लंबाई] [चौड़ाई] [ऊंचाई] के रूप में 3-डी सरणी का उपयोग करके बनाया जा सकता है। कार्य न्यूनतम योग पथ की गणना करना है जो घन को पार करके प्राप्त किया जाएगा और इसलिए परिणाम प्रिंट करें।

आइए इसके लिए विभिन्न इनपुट आउटपुट परिदृश्य देखें -

में - इंट क्यूब [लंबाई] [चौड़ाई] [ऊंचाई] ={ { {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 से शुरू होगा।

में - इंट क्यूब [लंबाई] [चौड़ाई] [ऊंचाई] ={ { {1, 2}, {7, 8}}, { {3, 5}, {9, 16}}}

बाहर − 3-डी सरणी में न्यूनतम योग पथ हैं:24

स्पष्टीकरण - हमें एक घन दिया गया है जिसकी लंबाई, चौड़ाई और ऊंचाई है। अब, हम 3-डी सरणी में न्यूनतम योग पथ की गणना करेंगे। तो, यह 1 + 2 + 5 + 16 यानी 24 से शुरू होगा।

नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है

  • पूर्णांक प्रकार मानों के साथ घन बनाने के लिए 3-डी सरणी इनपुट करें। फ़ंक्शन में डेटा को न्यूनतम_सबपाथ (क्यूब) के रूप में पास करें।

  • फंक्शन के अंदर मिनिमम_सबपाथ(क्यूब)

    • क्यूब के समान आकार की एक सरणी बनाएं और एआर [0] [0] [0] को क्यूब [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 को न्यूनतम (arr [i-1] [j] [0], arr [i] पर सेट करें। j-1][0], INT_MAX) और arr[i][j][0] to min_val + cube[i][j][0]

    • एक घन की लंबाई तक i से 1 तक के लिए लूप प्रारंभ करें और k से 1 तक एक सरणी की ऊंचाई तक एक और लूप प्रारंभ करें और min_val को न्यूनतम (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 को न्यूनतम (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 को न्यूनतम (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]

    • वापसी गिरफ्तारी[लंबाई-1][चौड़ाई-1][ऊंचाई-1]

  • फ़ंक्शन के अंदर न्यूनतम (int a, int b, int c)

    • जाँच करें कि IF, b से कम और c से कम है, तो a वापस करें।

    • वरना, वापसी ग

    • वरना IF, b c से कम है तो b

    • वरना, वापसी ग

उदाहरण

#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. सी++ में पथ योग III

    मान लीजिए कि हमने एक बाइनरी ट्री दिया है जिसमें प्रत्येक नोड में एक पूर्णांक कुंजी होती है। हमें उन पथों को खोजना है जो किसी दिए गए मान के योग हैं। रास्ता जड़ से पत्ती तक शुरू होना चाहिए। हमें वह रास्ता खोजना होगा जहां योग समान हो। अगर पेड़ [5,4,8,11,null,13,4,7,2,null,null,5,1] जैसा है, और योग 22

  1. सी ++ में एक सम ऐरे पहेली?

    यहां हम सरणी से संबंधित एक दिलचस्प समस्या देखेंगे। n तत्वों के साथ एक सरणी है। हमें n तत्वों की एक और सरणी बनानी है। लेकिन दूसरी सरणी की i-वें स्थिति i-वें तत्व को छोड़कर पहले सरणी के सभी तत्वों का योग धारण करेगी। और एक बाधा यह है कि हम इस समस्या में घटाव ऑपरेटर का उपयोग नहीं कर सकते हैं। यदि हम घट

  1. पायथन में न्यूनतम पथ योग

    मान लीजिए कि हमारे पास गैर-ऋणात्मक पूर्णांकों से भरा एक m x n मैट्रिक्स है, तो ऊपरी बाएं कोने से नीचे दाएं कोने तक एक पथ खोजें जो इसके पथ के साथ सभी संख्याओं के योग को कम करता है। आंदोलन किसी भी समय केवल नीचे या दाएं हो सकते हैं। तो उदाहरण के लिए, यदि मैट्रिक्स नीचे जैसा है 1 3 1 1 5 1 4 2 1 आ