मान लीजिए हमारे पास दो संख्याएं r, c और n x m आकार का एक ग्रिड है। कुछ सेल काले हैं और शेष सफेद। एक ऑपरेशन में, हम कुछ काले सेल चुन सकते हैं और ठीक इन दो में से एक कर सकते हैं:
- उसकी पंक्ति के सभी सेल को काला रंगें, या
- उसके कॉलम के सभी सेल को काला रंगें।
हमें पंक्ति r और कॉलम c के सेल को काला बनाने के लिए आवश्यक न्यूनतम ऑपरेशनों की संख्या ढूंढनी है। यदि असंभव है, तो -1 वापस करें।
उदाहरण के लिए, यदि इनपुट है:
| W | B | W | W | W |
| B | B | B | W | B |
| W | W | B | B | B |
r = 0 और c = 3
तो आउटपुट 1 होगा, क्योंकि हम पहली पंक्ति को बदलकर इसे ऐसा बना सकते हैं:
| B | B | B | B | B |
| B | B | B | W | B |
| W | W | B | B | B |
चरण
इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे:
n := ग्रिड की पंक्ति संख्या m := ग्रिड की कॉलम संख्या ans := inf i := 0 से n-1 तक, करें: j := 0 से m-1 तक, करें: यदि matrix[i, j], 'B' के बराबर है, तो: ans := ans का न्यूनतम और (1 यदि i और r अलग हैं, अन्यथा 0) + (1 यदि j और c अलग हैं, अन्यथा 0) यदि ans > 2, तो: -1 वापस करें अन्यथा 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