Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> 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++ . में मैट्रिक्स का ज़िगज़ैग (या विकर्ण) ट्रैवर्सल

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

  1. सी++ में सर्पिल मैट्रिक्स III

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

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

    बाइनरी सर्च एक ऐसा तरीका है जिससे क्रमबद्ध सरणी में आवश्यक तत्व को बार-बार आधा करके और आधे में खोज कर खोजा जा सकता है। यह विधि संपूर्ण सरणी से प्रारंभ करके की जाती है। फिर इसे आधा कर दिया जाता है। यदि आवश्यक डेटा मान सरणी के मध्य में तत्व से अधिक है, तो सरणी के ऊपरी आधे हिस्से पर विचार किया जाता है