ধরুন আমাদের একটি n x n ম্যাট্রিক্স আছে। ম্যাট্রিক্সকে একটি ভাল ম্যাট্রিক্স বলা হয় যেখানে 1 এর সমান নয় এমন প্রতিটি সংখ্যাকে একই সারির একটি সংখ্যা এবং একই কলামে একটি সংখ্যার যোগফল হিসাবে প্রকাশ করা যায়। প্রদত্ত ম্যাট্রিক্স ভাল কি না তা আমাদের পরীক্ষা করতে হবে।
সুতরাং, যদি ইনপুট মত হয়
1 | 1 | 2 |
2 | 3 | 1 |
6 | 4 | 1 |
তাহলে আউটপুট True হবে, কারণ নিচের বাম কোণে 6টি বৈধ কারণ যখন এর যোগফল 2 এর উপরে এবং 4টি ডানদিকে। এই ম্যাট্রিক্সে 1 এর সমান নয় এমন প্রতিটি সংখ্যার জন্য একই ধারণ করে।
পদক্ষেপ
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
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