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

C++ में बूलियन मैट्रिक्स में सबसे बड़े क्षेत्र की लंबाई ज्ञात कीजिए

इस समस्या में, हमें nXm आकार का 2-डी मैट्रिक्स दिया गया है जिसमें केवल 0 और 1 है। हमारा काम बूलियन मैट्रिक्स में सबसे बड़े क्षेत्र की लंबाई का पता लगाना है।

समस्या का विवरण: यदि किसी सेल में 1 है, तो वह भरा हुआ सेल है। हमें कनेक्टेड सेल की लंबाई खोजने की जरूरत है जो एक-दूसरे से सटे हुए हैं क्षैतिज या लंबवत या तिरछे।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट: मैट्रिक्स[4][5]

{ {0, 1, 1, 0, 1},
{0, 0, 1, 1, 1},

{1, 0, 0, 0, 0},
{1, 0, 1, 0, 1} }

आउटपुट: 6

स्पष्टीकरण:

जुड़े हुए भरे हुए कक्षों की संख्या 1, 2, 6 है।

समाधान दृष्टिकोण -

समस्या को हल करने के लिए, हमें बस मैट्रिक्स के कनेक्टेड सेल की कुल संख्या की गणना करने की आवश्यकता है।

इसके लिए, हम सेल के लिए डीएफएस करेंगे जो वर्तमान सेल के सभी पड़ोसी कोशिकाओं की जांच करेगा (एक सेल के लिए 8 पड़ोसी सेल हो सकते हैं)। प्रत्येक सेल के लिए, हमें हैश-मैप का उपयोग करके यह जांचना होगा कि क्या इसे ट्रैक करके देखा गया है। और पूरा होने पर, हमें विज़िट किए गए सेल की अधिकतम संख्या वापस करनी होगी।

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,

उदाहरण

#include <bits/stdc++.h>
using namespace std;
#define ROW 4
#define COL 5

int isNotVisited(int M[][COL], int row, int col, bool visited[][COL]) {
   
   return (row >= 0) && (row < ROW) && (col >= 0 ) && (col < COL) && (M[row][col] && !visited[row][col]);
}

void depthFirstSearch(int M[][COL], int row, int col, bool visited[][COL], int& count){
   
   static int rowNbr[] = { -1, -1, -1, 0, 0, 1, 1, 1 };
   static int colNbr[] = { -1, 0, 1, -1, 1, -1, 0, 1 };
   visited[row][col] = true;

   for (int k = 0; k < 8; ++k) {
      if (isNotVisited(M, row + rowNbr[k], col + colNbr[k], visited)) {
         count++;
         depthFirstSearch(M, row + rowNbr[k], col + colNbr[k], visited, count);
      }
   }
}

int findLargestRegionLength(int M[][COL]) {
   
   bool isvisited[ROW][COL];
   memset(isvisited, 0, sizeof(isvisited));
   int maxCount = -1;
   for (int i = 0; i < ROW; ++i) {
      for (int j = 0; j < COL; ++j) {
         if (M[i][j] && !isvisited[i][j]) {

            int count = 1;
            depthFirstSearch(M, i, j, isvisited, count);
            maxCount = max(maxCount, count);
         }
      }
   }
   return maxCount;
}

int main(){
   int M[][COL] = { {0, 1, 1, 0, 1},
                {0, 0, 1, 1, 1},
                {1, 0, 0, 0, 0},
                {1, 0, 1, 0, 1} };

   cout<<"The length of largest region is "<<findLargestRegionLength(M);

   return 0;
}

आउटपुट

The length of largest region is 6

  1. सी++ बूलियन मैट्रिक्स

    बूलियन मैट्रिक्स एक मैट्रिक्स है जिसमें केवल दो तत्व 0 और 1 हैं। इस बूलियन मैट्रिक्स प्रश्न के लिए, हमारे पास एमएक्सएन आकार का बूलियन मैट्रिक्स एआर [एम] [एन] है। और हल करने की शर्त है, यदि m[i][j] =1 तो m[i] =1 और m[j] =1 जिसका अर्थ है कि ith पंक्ति और jth कॉलम के सभी तत्व 1 हो जाएंगे। आइए एक उदाहर

  1. सी ++ में स्ट्रिंग की लंबाई खोजने के लिए 5 अलग-अलग तरीके?

    वर्णों का एक क्रम या वर्ण का एक रेखीय सरणी स्ट्रिंग के रूप में जाना जाता है। इसकी घोषणा अन्य सरणियों को परिभाषित करने के समान है। सरणी की लंबाई स्ट्रिंग में वर्णों की संख्या है। स्ट्रिंग की लंबाई ज्ञात करने के लिए कई अंतर्निहित विधियाँ और अन्य विधियाँ हैं। यहाँ, हम C++ में एक स्ट्रिंग की लंबाई ज्ञा

  1. सी ++ प्रोग्राम एक स्ट्रिंग की लंबाई का पता लगाने के लिए

    एक स्ट्रिंग एक आयामी वर्ण सरणी है जिसे एक शून्य वर्ण द्वारा समाप्त किया जाता है। स्ट्रिंग की लंबाई शून्य वर्ण से पहले स्ट्रिंग में वर्णों की संख्या है। उदाहरण के लिए। char str[] = “The sky is blue”; Number of characters in the above string = 15 एक स्ट्रिंग की लंबाई ज्ञात करने के लिए एक