मान लीजिए हमारे पास दो N X M बाइनरी मैट्रिक्स A और B हैं। एक ऑपरेशन में, हम एक उप-मैट्रिक्स (कम से कम 2x2) का चयन कर सकते हैं और कॉर्नर एलिमेंट्स की पैरिटी को बदल सकते हैं (बिट्स फ्लिप करें)। अंत में, हमें यह जांचना है कि क्या मैट्रिक्स A को किसी भी संख्या में ऑपरेशन करके B में बदला जा सकता है या नहीं।
तो, यदि इनपुट है
| 1 | 0 | 0 |
| 1 | 0 | 1 |
| 1 | 0 | 0 |

तो आउटपुट True होगा क्योंकि हम mat1 पर शीर्ष बाएं 2x2 वर्ग उप-मैट्रिक्स पर ऑपरेशन करके mat2 प्राप्त कर सकते हैं।
हल करने के चरण
- row := mat1 की पंक्ति संख्या
- column := mat1 की स्तंभ संख्या
- रेंज 1 से row - 1 तक के लिए i, करें:
- रेंज 1 से column - 1 तक के लिए j, करें:
- यदि 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 से column - 1 तक के लिए j, करें:
- रेंज 0 से row - 1 तक के लिए i, करें:
- रेंज 0 से column - 1 तक के लिए j, करें:
- यदि mat1[i, j], mat2[i, j] के समान नहीं है, तो:
- False लौटाएं
- यदि mat1[i, j], mat2[i, j] के समान नहीं है, तो:
- रेंज 0 से column - 1 तक के लिए j, करें:
- True लौटाएं
उदाहरण
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