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

C++ में बूलियन मैट्रिक्स प्रश्न

यहां हम एक रोचक बूलियन मैट्रिक्स समस्या देखेंगे। एक बूलियन मैट्रिक्स दिया गया है जिसमें 0 और 1 हैं। हमारा लक्ष्य यह ढूंढना है कि 1 कहां मार्क किया गया है। यदि 1 स्थिति mat[i,j] पर मार्क किया गया है, तो हम पंक्ति i और स्तंभ j के सभी एंट्रीज को 1 बना देंगे। एक उदाहरण देखते हैं। यदि मैट्रिक्स नीचे जैसा है -

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

तो संशोधन के बाद, यह होगा -

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

एल्गोरिदम

matrixUpdate(matrix[R,C])

begin
    आकार R के row[R] और आकार C के col[C] दो मैट्रिक्स परिभाषित करें, और उन्हें 0 से भरें
    mat[R,C] की पंक्ति और स्तंभ इंडेक्स को चिह्नित करें जहां 1 रखा गया है, row[R] और col[C] मैट्रिक्स में
    row[R] और col[C] की जांच करें यदि स्थान चिह्नित है, तो उस पंक्ति और स्तंभ के सभी स्थानों को 1 से भरें
end

उदाहरण

#include <iostream>
#define R 4
#define C 4
using namespace std;

void updateMatrix(bool mat[R][C]) {
    bool row[R];
    bool col[C];
    int i, j;
    
    for (int i = 0; i < R; i++) { // row मैट्रिक्स के सभी तत्वों को 0 सेट करें
        row[i] = 0;
    }
    for (i = 0; i < C; i++) { // col मैट्रिक्स के सभी तत्वों को 0 सेट करें
        col[i] = 0;
    }
    
    for (int i = 0; i < R; i++) { // row और col मैट्रिक्स को चिह्नित करें जहां 1 मौजूद है
        for (int j = 0; j < C; j++) {
            if (mat[i][j] == 1) {
                row[i] = 1;
                col[j] = 1;
            }
        }
    }
    
    for (i = 0; i < R; i++) { // जहां 1 चिह्नित है वहां पंक्ति और स्तंभ के सभी 1 सेट करें
        for (j = 0; j < C; j++) {
            if (row[i] == 1 || col[j] == 1) {
                mat[i][j] = 1;
            }
        }
    }
}

void displayMatrix(bool mat[R][C]) {
    for (int i = 0; i < R; i++) {
        for (int j = 0; j < C; j++) {
            cout << mat[i][j];
        }
        cout << endl;
    }
}

int main() {
    bool mat[R][C] = { {1, 0, 0, 1},
                       {0, 0, 0, 0},
                       {0, 0, 0, 0},
                       {0, 1, 0, 0} };
    
    cout << "Given Matrix" << endl;
    displayMatrix(mat);
    updateMatrix(mat);
    cout << "Updated Matrix" << endl;
    displayMatrix(mat);
    return 0;
}

आउटपुट

Given Matrix
1001
0000
0000
0100
Updated Matrix
1111
1101
1101
1111
  1. - मैट्रिक्स संभावना प्रश्न

    यहां हम एक मैट्रिक्स संभावना समस्या देखेंगे। हमारे पास एक आयताकार मैट्रिक्स है। हम वर्तमान सेल से चार दिशाओं में समान संभावना के साथ जा सकते हैं। ये चार दिशाएं बाएं, दाएं, ऊपर और नीचे हैं। हमें M[i, j] स्थिति से N चालों के बाद संभावना की गणना करनी है। यहां हम DFS से संबंधित कुछ करेंगे। हम वर्तमान क

  1. C++ में मैट्रिक्स की पंक्ति-वार बनाम स्तंभ-वार ट्रैवर्सल C++ में मैट्रिक्स की पंक्ति-वार बनाम स्तंभ-वार ट्रैवर्सल

    एक मैट्रिक्स को दो तरीकों से ट्रैवर्स किया जा सकता है। पंक्ति-वार ट्रैवर्सल प्रत्येक पंक्ति को एक-एक करके पहले पंक्ति से शुरू करके अंतिम पंक्ति तक देखता है। पंक्ति में तत्व इंडेक्स 0 से अंतिम इंडेक्स तक लौटाए जाते हैं। स्तंभ-वार ट्रैवर्सल में, तत्वों को पहले स्तंभ से अंतिम स्तंभ तक क्रम में ट्रैवर्स

  1. C++ में स्पाइरल मैट्रिक्स III (Spiral Matrix III) C++ में स्पाइरल मैट्रिक्स III (Spiral Matrix III)

    मान लीजिए हमारे पास R पंक्तियों और C स्तंभों वाला एक 2-आयामी ग्रिड है, हम (r0, c0) से शुरू करते हैं और पूर्व की ओर मुख किए होते हैं। यहां, ग्रिड का उत्तर-पश्चिम कोना पहली पंक्ति और स्तंभ पर है, और दक्षिण-पूर्व कोना अंतिम पंक्ति और स्तंभ पर है। हम इस ग्रिड में हर स्थिति को देखने के लिए दक्षिणावर्त स