মান লক্ষ্য করুন একটি n x n ম্যাট্রিক্স। ম্যাট্রিক্সটি ভালো বলা হবে যদি ১ থেকে ভিন্ন প্রতিটি সংখ্যা একই রো-এর একটি সংখ্যা এবং একই কলামের একটি সংখ্যার যোগফল হিসেবে এক্সপ্রেস করা যায়। আমাদের চেক করতে হবে দেওয়া ম্যাট্রিক্স ভালো কিনা।
তাই, যদি ইনপুট হয়
| 1 | 1 | 2 |
| 2 | 3 | 1 |
| 6 | 4 | 1 |
তবে আউটপুট হবে True, কারণ বাম নিচের ৬টি বৈধ কারণ তার উপরের ২ এবং ডানের ৪ যোগফল ৬। এই ম্যাট্রিক্সে ১ থেকে ভিন্ন সব সংখ্যার জন্য একই প্রয়োগ হয়।
ধাপসমূহ
এটি সমাধান করার জন্য, আমরা এই ধাপগুলো অনুসরণ করব −
n := size of M
for initialize i := 0, when i < n, update (increase i by 1), do:
for initialize j := 0, when j < n, update (increase j by 1), do:
ok := 0
if M[i, j] is not equal to 1, then:
c := M[i, j]
for initialize h := 0, when h < n, update (increase h by 1), do:
for initialize k := 0, when k < n, update (increase k by 1), do:
if c is same as M[i, h] + M[k, j], then:
ok := 1
if ok is same as 0 and M[i, j] is not equal to 1, then:
return false
return true
উদাহরণ
বेहतर বোঝার জন্য ইমপ্লিমেন্টেশন দেখি −
#include <bits/stdc++.h>
using namespace std;
bool solve(vector<vector<int>> M){
int n = M.size();
int c;
bool ok;
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
ok = 0;
if (M[i][j] != 1)
c = M[i][j];
for (int h = 0; h < n; h++){
for (int k = 0; k < n; k++)
if (c == M[i][h] + M[k][j])
ok = 1;
}
if (ok == 0 && M[i][j] != 1){
return false;
}
}
}
return true;
}
int main(){
vector<vector<int>> matrix = { { 1, 1, 2 }, { 2, 3, 1 }, { 6, 4, 1 } };
cout << solve(matrix) << endl;
}
ইনপুট
{ { 1, 1, 2 }, { 2, 3, 1 }, { 6, 4, 1 } }
আউটপুট
1