একটি বাইনারি ম্যাট্রিক্স দেওয়া আছে। এর চার কোণে ১ থাকা যেকোনো রেক্ট্যাঙ্গেল (আয়তক্ষেত্র) আছে কিনা তা খুঁজে বের করতে হবে।
উদাহরণ ম্যাট্রিক্স:
| 1 | 0 | 0 | 1 | 0 |
| 0 | 0 | 1 | 0 | 1 |
| 0 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 |
এখানে একটি রেক্ট্যাঙ্গেল আছে যার কোণগুলো ১।
- ম্যাট্রিক্সকে উপরের সারি থেকে নিচের সারি স্ক্যান করুন।
- প্রতিটি সারিতে দুইটি ১-এর যাবতীয় কম্বিনেশন (কলাম ইনডেক্স জোড়া) একটি হ্যাশ সেটে সংরক্ষণ করুন।
- যদি পরবর্তী কোনো সারিতে একই কম্বিনেশন আবার পাওয়া যায়, তবে রেক্ট্যাঙ্গেল আছে বলে মনে করুন।
#include <iostream>
#include <unordered_set>
#include <unordered_map>
#include <vector>
using namespace std;
bool isRectanglePresent(const vector<vector<int> >& matrix) {
int rows = matrix.size();
if (rows == 0) return false;
int columns = matrix[0].size();
unordered_map<int, unordered_set<int> > table;
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < columns - 1; ++j) {
for (int k = j + 1; k < columns; ++k) {
if (matrix[i][j] == 1 && matrix[i][k] == 1) {
if (table.find(j) != table.end() && table[j].find(k) != table[j].end())
return true;
if (table.find(k) != table.end() && table[k].find(j) != table[k].end())
return true;
table[j].insert(k);
table[k].insert(j);
}
}
}
}
return false;
}
int main() {
vector<vector<int> > matrix = {
{1, 0, 0, 1, 0},
{0, 0, 1, 0, 1},
{0, 0, 0, 1, 0},
{1, 0, 1, 0, 1}
};
if (isRectanglePresent(matrix))
cout << "Rectangle is present";
else
cout << "Rectangle is not present";
}
Rectangle is present