মান লিজিয়ে আমাদের দুটি 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-এর কলাম কাউন্টi১ থেকেrow - 1পর্যন্ত, করুন:j১ থেকেcolumn - 1পর্যন্ত, করুন:- যদি
mat1[i, j]mat2[i, j]সমান না হয়, তবে:mat1[i, j] := mat1[i, j] XOR 1mat1[0, 0] := mat1[0, 0] XOR 1mat1[0, j] := mat1[0, j] XOR 1mat1[i, 0] := mat1[i, 0] XOR 1
- যদি
i০ থেকেrow - 1পর্যন্ত, করুন:j০ থেকেcolumn - 1পর্যন্ত, করুন:- যদি
mat1[i, j]mat2[i, j]সমান না হয়, তবে:Falseরিটার্ন করুন
- যদি
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