मान लीजिए कि हमारे पास दो एन एक्स एम बाइनरी मैट्रिसेस ए और बी हैं। एक ही ऑपरेशन में, हम एक सब-मैट्रिक्स (कम से कम 2x2) का चयन कर सकते हैं और कोने के तत्वों (फ्लिप बिट्स) की समता को परिवर्तित कर सकते हैं। अंत में, हमें यह जांचना होगा कि क्या मैट्रिक्स ए को किसी भी संख्या में संचालन करके बी में परिवर्तित किया जा सकता है या नहीं।
तो, अगर इनपुट पसंद है
1 | 0 | 0 |
1 | 0 | 1 |
1 | 0 | 0 |
तो आउटपुट सही होगा क्योंकि हम mat2 प्राप्त करने के लिए mat1 पर आकार (2x2) के ऊपरी बाएं वर्ग उप-मैट्रिक्स पर ऑपरेशन कर सकते हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- पंक्ति :=mat1 की पंक्ति गणना
- स्तंभ :=mat1 की स्तंभ संख्या
- 1 से पंक्ति -1 की श्रेणी में i के लिए
- जे के लिए श्रेणी 1 से कॉलम -1 तक, करें
- यदि mat1[i, j] mat2[i, j] के समान नहीं है, तो
- mat1[i, j] :=mat1[i, j] XOR 1
- mat1[0, 0] :=mat1[0, 0] XOR 1
- mat1[0, j] :=mat1[0, j] XOR 1
- mat1[i, 0] :=mat1[i, 0] XOR 1
- यदि mat1[i, j] mat2[i, j] के समान नहीं है, तो
- जे के लिए श्रेणी 1 से कॉलम -1 तक, करें
- मैं के लिए 0 से पंक्ति -1 की सीमा में, करो
- जे के लिए 0 से कॉलम -1 तक की श्रेणी में, करें
- यदि mat1[i, j] mat2[i, j] के समान नहीं है, तो
- झूठी वापसी
- यदि mat1[i, j] mat2[i, j] के समान नहीं है, तो
- जे के लिए 0 से कॉलम -1 तक की श्रेणी में, करें
- सही लौटें
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def solve(mat1, mat2): row = len(mat1) column = len(mat1[0]) for i in range(1, row): for j in range(1, column): if mat1[i][j] != mat2[i][j]: mat1[i][j] ^= 1 mat1[0][0] ^= 1 mat1[0][j] ^= 1 mat1[i][0] ^= 1 for i in range(row): for j in range(column): if mat1[i][j] != mat2[i][j]: return False return True mat1 = [ [1, 0, 0], [1, 0, 1], [1, 0, 0]] mat2 = [ [0, 1, 0], [0, 1, 1], [1, 0, 0]] print(solve(mat1, mat2))
इनपुट
[ [1, 0, 0], [1, 0, 1], [1, 0, 0]], [ [0, 1, 0], [0, 1, 1], [1, 0, 0]]
आउटपुट
True