কম্পিউটার টিউটোরিয়াল

C++-এ বাইনারি ম্যাট্রিক্সে কোণে ১ থাকা রেক্ট্যাঙ্গেল খুঁজুন

একটি বাইনারি ম্যাট্রিক্স দেওয়া আছে। এর চার কোণে ১ থাকা যেকোনো রেক্ট্যাঙ্গেল (আয়তক্ষেত্র) আছে কিনা তা খুঁজে বের করতে হবে।

উদাহরণ ম্যাট্রিক্স:

10010
00101
00010
10101

এখানে একটি রেক্ট্যাঙ্গেল আছে যার কোণগুলো ১।

দক্ষ পদ্ধতি (Hash Set ব্যবহার)
  • ম্যাট্রিক্সকে উপরের সারি থেকে নিচের সারি স্ক্যান করুন।
  • প্রতিটি সারিতে দুইটি ১-এর যাবতীয় কম্বিনেশন (কলাম ইনডেক্স জোড়া) একটি হ্যাশ সেটে সংরক্ষণ করুন।
  • যদি পরবর্তী কোনো সারিতে একই কম্বিনেশন আবার পাওয়া যায়, তবে রেক্ট্যাঙ্গেল আছে বলে মনে করুন।
উদাহরণ কোড
#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
  1. সি++-এ প্যারেন্ট পয়েন্টার (Parent Pointers) ব্যবহার করে বাইনারি ট্রিতে ডান সিবলিং (Right Sibling) বের করা

  2. সব ১ সহ সর্বোচ্চ আকারের বাইনারি সাব-ম্যাট্রিক্স আয়তন (C++ প্রোগ্রাম)

  3. C++-এ Find Leaves of Binary Tree: বাইনারি ট্রি থেকে লีফ নোডগুলো লেভেল অনুযায়ী সংগ্রহ করা

  4. C++-এ মিডপয়েন্ট ব্যবহার করে রেক্ট্যাঙ্গেলের কর্নার বের করা