মান লিজিয়ে আমাদের দুটি ম্যাট্রিক্স আছে যাদের সাইজ n x m এবং নাম mat1 এবং mat2। আমাদের যাচাই করতে হবে এই দুটি ম্যাট্রিক্স কি স্ট্রিক্টলি ইনক্রিজিং (strictly increasing) করা সম্ভব কেবল Corresponding পজিশনের (i, j) এলিমেন্টগুলো সোয়্যাপ করে।
যেমন, ইনপুট যদি:
| 7 | 15 |
| 16 | 10 |
| 14 | 9 |
| 8 | 17 |
তবে আউটপুট হবে True কারণ আমরা (7, 14) এবং (10, 17) জোড়াগুলো সোয়্যাপ করে সেগুলো স্ট্রিক্টলি ইনক্রিজিং করতে পারি।
| 14 | 15 |
| 16 | 17 |
| 7 | 9 |
| 8 | 10 |
সমাধানের ধাপসমূহ
row := mat1-এর রো কাউন্টcol := mat1-এর কলাম কাউন্টi০ থেকেrow - 1পর্যন্ত, করুন:j০ থেকেcol - 1পর্যন্ত, করুন:- যদি
mat1[i,j] > mat2[i,j]হয়, তবে:mat1[i, j]এবংmat2[i, j]সোয়্যাপ করুন
- যদি
i০ থেকেrow - 1পর্যন্ত, করুন:j০ থেকেcol-2পর্যন্ত, করুন:- যদি
mat1[i, j] >= mat1[i, j + 1]অথবাmat2[i, j] >= mat2[i, j + 1]হয়, তবে:Falseরিটার্ন করুন
- যদি
i০ থেকেrow-2পর্যন্ত, করুন:j০ থেকেcol - 1পর্যন্ত, করুন:- যদি
mat1[i, j] >= mat1[i + 1, j]অথবাmat2[i, j] >= mat2[i + 1, j]হয়, তবে:Falseরিটার্ন করুন
- যদি
Trueরিটার্ন করুন
উদাহরণ
বेहतर বোঝার জন্য নিচের বাস্তবায়নটি দেখুন:
def solve(mat1, mat2):
row = len(mat1)
col = len(mat1[0])
for i in range(row):
for j in range(col):
if mat1[i][j] > mat2[i][j]:
mat1[i][j], mat2[i][j] = mat2[i][j], mat1[i][j]
for i in range(row):
for j in range(col-1):
if mat1[i][j] >= mat1[i][j + 1] or mat2[i][j] >= mat2[i][j + 1]:
return False
for i in range(row-1):
for j in range(col):
if mat1[i][j] >= mat1[i + 1][j] или mat2[i][j] >= mat2[i + 1][j]:
return False
return True
mat1 = [[7, 15],
[16, 10]]
mat2 = [[14, 9],
[8, 17]]
print(solve(mat1, mat2))
ইনপুট
[[7, 15], [16, 10]], [[14, 9], [8, 17]]
আউটপুট
True