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

पता लगाएँ कि क्या बाइनरी मैट्रिक्स में एक आयत है जिसके कोने C++ में 1 हैं

मान लीजिए कि हमारे पास एक बाइनरी मैट्रिक्स है। हमें यह पता लगाना है कि क्या दिए गए मैट्रिक्स में कोई आयत या अनुक्रम है जिसके चारों कोने 1 के बराबर हैं। मैट्रिक्स इस तरह है

1 0 0 1 0
0 0 1 0 1
0 0 0 1 0
1 0 1 0 1

परिणाम हाँ होगा। यहाँ एक आयत मौजूद है, जिसके कोने 1s हैं।

1 0 1
0 1 0
1 0 1

इसे हल करने के लिए हम एक कुशल दृष्टिकोण का उपयोग करेंगे। हम इन चरणों का पालन करेंगे -

  • मैट्रिक्स को ऊपर से नीचे तक लाइन से स्कैन करें

  • प्रत्येक पंक्ति के लिए दो 1 के प्रत्येक संयोजन को याद रखें और उसे हैश-सेट में पुश करें।

  • अगर हम उस संयोजन को बाद की पंक्ति में फिर से पाते हैं, तो हमें हमारा आयत मिल जाएगा।

उदाहरण

#include<iostream>
#include<unordered_set>
#include<unordered_map>
#include<vector>
using namespace std;
bool isRectanglePresent(const vector<vector<int> >& matrix) {
   int rows = matrix.size();
   if (rows == 0)
   return false;
   int columns = matrix[0].size();
   unordered_map<int, unordered_set<int> > table;
   for (int i = 0; i < rows; ++i) {
      for (int j = 0; j < columns - 1; ++j) {
         for (int k = j + 1; k < columns; ++k) {
            if (matrix[i][j] == 1 && matrix[i][k] == 1) {
               if (table.find(j) != table.end() && table[j].find(k) != table[j].end())
                  return true;
               if (table.find(k) != table.end() && table[k].find(j) != table[k].end())
                  return true;
               table[j].insert(k);
               table[k].insert(j);
            }
         }
      }
   }
   return false;
}
int main() {
   vector<vector<int> > matrix = {
      { 1, 0, 0, 1, 0 },
      { 0, 0, 1, 0, 1 },
      { 0, 0, 0, 1, 0 },
      { 1, 0, 1, 0, 1 }
   };
   if (isRectanglePresent(matrix))
      cout << "Rectangle is present";
   else
      cout << "Rectangle is not present";
}

आउटपुट

Rectangle is present

  1. C++ में पैरेंट पॉइंटर्स के साथ बाइनरी ट्री का राइट सिबलिंग खोजें

    इस समस्या में हमें एक बाइनरी ट्री और पैरेंट पॉइंटर्स दिए जाते हैं। हमारा काम पैरेंट पॉइंटर्स वाले बाइनरी ट्री के राइट सिबलिंग को ढूंढना है। समस्या को समझने के लिए एक उदाहरण लेते हैं, इनपुट Node = 3 आउटपुट 7 समाधान दृष्टिकोण समस्या का एक सरल समाधान निकटतम पूर्वज का लीफ नोड (जो न तो वर्तमान नोड

  1. C++ में बाइनरी ट्री के पत्ते खोजें

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है। हम सभी पत्तियों को इकट्ठा करके हटा देंगे और पेड़ के खाली होने तक दोहराएंगे। तो, अगर इनपुट पसंद है तो आउटपुट [[4,5,3],[2],[1]] . होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - एक नक्शा sz परिभाषित करें एक 2डी सरणी रेट परिभाषित करें फ़ंक्श

  1. C++ में मध्य बिंदुओं का उपयोग करके आयत के कोनों का पता लगाएं

    मान लीजिए हमारे पास एक आयत ABCD है, लेकिन हमारे पास केवल मध्य बिंदुओं P और Q के निर्देशांक और आयत L की लंबाई है। हमारा कार्य P और Q के निर्देशांकों और भुजा L की लंबाई का उपयोग करके A, B, C और D के निर्देशांक ज्ञात करना है। उदाहरण के लिए, यदि P (1, 0) है, और Q (1, 2) है , और L 2 है, तो A, B, C, D