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

C++ में 1 की संख्या 0 से एक अधिक होने वाले अधिकतम सब-मैट्रिक्स क्षेत्र


इस ट्यूटोरियल में, हम 1 की संख्या 0 से एक अधिक होने वाले अधिकतम सब-मैट्रिक्स क्षेत्र को खोजने के लिए एक प्रोग्राम पर चर्चा करेंगे।

इसके लिए हमें 0 और 1 वाली एक मैट्रिक्स प्रदान की जाएगी। हमारा कार्य 0 से अधिक 1 वाले अधिकतम क्षेत्र के सब-मैट्रिक्स को प्राप्त करना है।

उदाहरण

#include <bits/stdc++.h> 
using namespace std; 
#define SIZE 10 
// सबसे लंबे सब-मैट्रिक्स की लंबाई ढूंढना 
int lenOfLongSubarr(int arr[], int n, int& start, int& finish) { 
    unordered_map<int, int> um; 
    int sum = 0, maxLen = 0; 
    for (int i = 0; i < n; i++) { 
        sum += arr[i]; 
        if (sum == 1) { 
            start = 0; 
            finish = i; 
            maxLen = i + 1; 
        } 
        else if (um.find(sum) == um.end()) um[sum] = i; 
        if (um.find(sum - 1) != um.end()) { 
            if (maxLen < (i - um[sum - 1])) 
                start = um[sum - 1] + 1; 
            finish = i; 
            maxLen = i - um[sum - 1]; 
        } 
    } 
    return maxLen; 
} 
// अधिकतम क्षेत्र ढूंढना 
void largestSubmatrix(int mat[SIZE][SIZE], int n) { 
    int finalLeft, finalRight, finalTop, finalBottom; 
    int temp[n], maxArea = 0, len, start, finish; 
    for (int left = 0; left < n; left++) { 
        memset(temp, 0, sizeof(temp)); 
        for (int right = left; right < n; right++) { 
            for (int i = 0; i < n; ++i) 
                temp[i] += mat[i][right] == 0 ? -1 : 1; 
            len = lenOfLongSubarr(temp, n, start, finish); 
            if ((len != 0) && (maxArea < (finish - start + 1) * (right - left + 1))) { 
                finalLeft = left; 
                finalRight = right; 
                finalTop = start; 
                finalBottom = finish; 
                maxArea = (finish - start + 1) * (right - left + 1); 
            } 
        } 
    } 
    cout << "(Top, Left): (" << finalTop << ", " << finalLeft << ")\n"; 
    cout << "(Bottom, Right): (" << finalBottom << ", " << finalRight << ")\n"; 
    cout << "Maximum area: " << maxArea; 
} 
int main() { 
    int mat[SIZE][SIZE] = { 
        { 1, 0, 0, 1 }, 
        { 0, 1, 1, 1 }, 
        { 1, 0, 0, 0 }, 
        { 0, 1, 0, 1 } 
    }; 
    int n = 4; largestSubmatrix(mat, n); 
    return 0; 
}

आउटपुट

(Top, Left): (1, 1) (Bottom, Right): (3, 3) Maximum area: 9
  1. C++ में आयत क्षेत्रफल II (Rectangle Area II) - ओवरलैपिंग आयतों का कुल क्षेत्रफल C++ में आयत क्षेत्रफल II (Rectangle Area II) - ओवरलैपिंग आयतों का कुल क्षेत्रफल

    समस्या विवरण हमें अक्ष-संरेखित (axis-aligned) आयतों की एक सूची दी गई है। प्रत्येक आयत rectangle[i] = {x1, y1, x2, y2} द्वारा दर्शाया गया है, जहां (x1, y1) निचले-बाएं कोने का बिंदु है और (x2, y2) ऊपरी-दाएं कोने का बिंदु है। हमें तल (plane) में सभी आयतों द्वारा कवर किए गए कुल क्षेत्रफल को ज्ञात करना

  1. - C++ में चतुर्भुज का अधिकतम क्षेत्रफल

    समस्या कथन चतुर्भुज की चार भुजाएं a, b, c, d दी गई हैं, दी गई भुजाओं से बनने वाले चतुर्भुज का अधिकतम क्षेत्रफल ज्ञात करें। एल्गोरिदम हम इस समस्या को हल करने के लिए ब्रह्मगुप्त के सूत्र का उपयोग कर सकते हैं: √((s-a)(s-b)(s-c)(s-d)) उपरोक्त सूत्र में s अर्ध-परिमाप है। इसकी गणना निम्नानुसार की जाती ह

  1. - C++ में अधिकतम सन्निकट सम संख्याओं की संख्या ज्ञात करें

    मान लीजिए हमारे पास n तत्वों की एक सरणी A है। हमें दी गई सरणी में अधिकतम सन्निकट सम संख्याओं की संख्या ढूंढनी है। इसलिए यदि सरणी A = [1, 2, 3, 4, 6, 8, 7] की तरह है, तो गिनती 3 होगी। हम इसे आसानी से हल कर सकते हैं। हमें दो काउंट वेरिएबल चाहिए: एक max_current, और दूसरा max_till_now। यदि एक सम संख्या