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

सी ++ प्रोग्राम आर पंक्ति सी कॉलम पर सभी कोशिकाओं को काला बनाने के लिए आवश्यक न्यूनतम संख्या में संचालन खोजने के लिए

मान लीजिए कि हमारे पास दो संख्याएँ r, c और n x m आकार की एक ग्रिड है। कुछ कोशिकाएँ काले रंग में और शेष सफेद रंग की होती हैं। एक ऑपरेशन में, हम कुछ काली कोशिकाओं का चयन कर सकते हैं और इन दोनों में से ठीक एक कर सकते हैं -

  • इसकी पंक्ति के सभी कक्षों को काला रंग दें, या
  • इसके कॉलम के सभी सेल को काला रंग दें।

हमें पंक्ति r और स्तंभ c में सेलों को काला बनाने के लिए आवश्यक न्यूनतम संक्रियाओं की संख्या ज्ञात करनी है। यदि असंभव हो, तो -1 लौटें।

तो, अगर इनपुट पसंद है

W B W W W
B B B W B
W W B B B

आर =0 और सी =3

तो आउटपुट 1 होगा, क्योंकि हम इसे बनाने के लिए पहली पंक्ति को बदल सकते हैं -

B B B B B
B B B W B
W W B B B

कदम

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

n := row count of grid
m := column count of grid
ans := inf
for initialize i := 0, when i < n, update (increase i by 1), do:
   for initialize j := 0, when j < m, update (increase j by 1), do:
      if matrix[i, j] is same as 'B', then:
         ans := minimum of ans and (1 if i and r are different, otherwise 0) + (1 if j and                c are different, otherwise 0)
if ans > 2, then:
   return -1
Otherwise
   return ans

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h>
using namespace std;

int solve(vector<vector<char>> matrix, int r, int c) {
   int n = matrix.size();
   int m = matrix[0].size();
   int ans = 999999;
   for (int i = 0; i < n; ++i) {
      for (int j = 0; j < m; ++j) {
         if (matrix[i][j] == 'B') {
            ans = min(ans, (i != r) + (j != c));
         }
      }
   }
   if (ans > 2) {
      return -1;
   }
   else
      return ans;
}
int main() {
   vector<vector<char>> matrix = { { 'W', 'B', 'W', 'W', 'W' }, { 'B', 'B', 'B', 'W', 'B'          }, { 'W', 'W', 'B', 'B',          'B' } };
   int r = 0, c = 3;
   cout << solve(matrix, r, c) << endl;
}

इनपुट

{ { 'W', 'B', 'W', 'W', 'W' }, { 'B', 'B', 'B', 'W', 'B' }, { 'W', 'W', 'B', 'B', 'B' } }, 0, 3

आउटपुट

1

  1. C++ प्रोग्राम ग्राफ़ को डिस्कनेक्ट करने के लिए काटने के लिए किनारों की न्यूनतम संख्या खोजने के लिए

    इस कार्यक्रम में हमें एक ग्राफ की एज कनेक्टिविटी को खोजने की जरूरत है। ग्राफ़ के ग्राफ़ की एक एज कनेक्टिविटी का अर्थ है कि यह एक पुल है, इसे हटाने से ग्राफ़ डिस्कनेक्ट हो जाएगा। डिस्कनेक्ट किए गए अप्रत्यक्ष ग्राफ़ में पुल को हटाने के साथ जुड़े घटकों की संख्या बढ़ जाती है। कार्य और छद्म कोड Begin &nb

  1. पायथन में स्ट्रिंग को क्रमबद्ध करने के लिए न्यूनतम संख्या में संचालन खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक स्ट्रिंग s है। जब तक हमें एक क्रमबद्ध स्ट्रिंग नहीं मिल जाती, तब तक हमें s पर निम्न ऑपरेशन करना होगा - सबसे बड़ी अनुक्रमणिका का चयन करें जैसे कि 1 <=i

  1. पायथन में लक्ष्य बनाने के लिए कॉलम फ्लिप करने के लिए न्यूनतम संख्या में संचालन की गणना करने का कार्यक्रम

    मान लीजिए कि हमारे पास समान पंक्तियों और स्तंभों के साथ एक मैट्रिक्स M और एक लक्ष्य मैट्रिक्स T है। अब मान लीजिए एक ऑपरेशन जहां हम मैट्रिक्स में एक विशेष कॉलम को फ्लिप करते हैं ताकि सभी 1s को 0s में बदल दिया जाए और सभी 0s को 1s में बदल दिया जाए। इसलिए यदि हम मैट्रिक्स पंक्तियों को मुफ्त में पुन:व्यव