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

C++ में बाइनरी मैट्रिक्स में निकटतम 1


एक बाइनरी मैट्रिक्स दी गई है, हमें प्रत्येक सेल से निकटतम सेल तक की न्यूनतम दूरी ज्ञात करनी है जिसमें 1 है।

आइए एक उदाहरण देखते हैं।

इनपुट

0 0 1 1 1 0 0 0 0

आउटपुट

1 1 0 0 0 1 1 1 2

न्यूनतम दूरी वह है जो वर्तमान सेल पंक्ति - 1 सेल पंक्ति + वर्तमान सेल स्तंभ - 1 सेल स्तंभ से न्यूनतम है।

एल्गोरिदम

  • वांछित आकार की मैट्रिक्स आरंभ करें।
  • दूरी स्टोर करने के लिए समान आकार की एक और मैट्रिक्स आरंभ करें।
  • पूरी मैट्रिक्स पर पुनरावृति करें।
    • यदि वर्तमान सेल मान 1 है, तो दूरी को 0 पर सेट करें क्योंकि 1 से 1 की दूरी 0 है।
    • यदि वर्तमान सेल मान 0 है
      • पूरी मैट्रिक्स पर फिर से पुनरावृति करें।
      • यदि सेल 1 है, तो वर्तमान सेल से दूरी की गणना करें।
      • न्यूनतम दूरी अपडेट करें।
  • दूरी मैट्रिक्स प्रिंट करें।
  • कार्यान्वयन

    निम्नलिखित C++ में उपरोक्त एल्गोरिदम का कार्यान्वयन है:

    #include <bits/stdc++.h> 
    using namespace std; 
    
    vector<vector<int>> findNearest1Distance(vector<vector<int>>& matrix) { 
        int rows = matrix.size(); 
        if (rows == 0) { 
            return matrix; 
        } 
        int cols = matrix[0].size(); 
        vector<vector<int>> distance(rows, vector<int>(cols, INT_MAX)); 
        for (int i = 0; i < rows; i++) { 
            for (int j = 0; j < cols; j++) { 
                if (matrix[i][j] == 1) { 
                    distance[i][j] = 0; 
                }else if (matrix[i][j] == 0) { 
                    for (int k = 0; k < rows; k++) { 
                        for (int l = 0; l < cols; l++) { 
                            if (matrix[k][l] == 1) { 
                                distance[i][j] = min(distance[i][j], abs(k - i) + abs(l - j)); 
                            } 
                        } 
                    } 
                } 
            } 
        } 
        return distance; 
    } 
    
    int main() { 
        vector<vector<int>> matrix{ {0, 0, 1}, {1, 1, 0}, {0, 0, 0} }; 
        vector<vector<int>> result = findNearest1Distance(matrix); 
        for (int i = 0; i < 3; i++) { 
            for (int j = 0; j < 3; j++) { 
                cout << result[i][j] << " "; 
            } 
            cout << endl; 
        } 
        return 0; 
    }

    आउटपुट

    यदि आप उपरोक्त कोड चलाते हैं, तो आपको निम्नलिखित परिणाम मिलेगा।

    1 1 0 0 0 1 1 1 2

    1. C++ में मैट्रिक्स का जिगजैग (या विकर्ण) ट्रैवर्सल C++ में मैट्रिक्स का जिगजैग (या विकर्ण) ट्रैवर्सल

      इस समस्या में, हमें एक 2D मैट्रिक्स दिया गया है। हमारा कार्य मैट्रिक्स के सभी तत्वों को विकर्ण क्रम में प्रिंट करना है। समस्या को समझने के लिए एक उदाहरण लेते हैं, 1 2 3 4 5 6 7 8 9 आउटपुट - 1 4 2 7 5 3 8 6 9 आइए उस पैटर्न को देखें जो मैट्रिक्स को जिगजैग या विकर्ण रूप में प्रिंट

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

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

    1. - C++ में बाइनरी सर्च

      बाइनरी सर्च क्रमबद्ध ऐरे में तत्व खोजने की कुशल विधि। ऐरे को बार-बार आधा करके खोज अंतराल कम किया जाता है। समय जटिलता: O(log n)। एल्गोरिदम पूरे ऐरे से शुरू करें मध्य तत्व जांचें यदि लक्ष्य मध्य से बड़ा: ऊपरी आधा खोजें यदि लक्ष्य मध्य से छोटा: निचला आधा खोजें दोहराएं जब तक मिल न जाए या ऐरे खाली न ह