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

C++ প্রোগ্রাম: বাইনারি সার্চ দিয়ে মিনিমাম ভার্টেক্স কভার সাইজ


ভার্টেক্স কভার (Vertex Cover) — নোডের একটি সেট যাতে গ্রাফের প্রতিটি এজ কমপক্ষে একটি নোডের সাথে ইনসিডেন্ট থাকে। মিনিমাম ভার্টেক্স কভার — সবচোয় ছোট যেই সেট।

অ্যালগরিদম (বাইনারি সার্চ + বিটমাস্ক)

  1. সাইজ k এর ভার্টেক্স কভার আছে কিনা চেক করুন (বিটমাস্ক সব সাবসেট ট্রাই করে)।
  2. বাইনারি সার্চ দিয়ে ন্যূনতম k খুঁজুন (১ থেকে V)।

C++ কোড উদাহরণ

#include <bits/stdc++.h>
using namespace std;
#define MAX 15
bool adj[MAX][MAX];

bool check_cover(int V, int k, int E) {
    int set = (1<>2)/c) | r; // Next combination (Gosper's hack)
    }
    return false;
}

int find_cover(int V, int E) {
    int lo = 1, hi = V;
    while (hi > lo) {
        int mid = (lo+hi)>>1;
        if (!check_cover(V, mid, E)) lo = mid+1;
        else hi = mid;
    }
    return lo;
}

void add_edge(int u, int v) { adj[u][v] = adj[v][u] = 1; }

int main() {
    memset(adj, 0, sizeof adj);
    int V=6, E=5;
    add_edge(2,3); add_edge(2,4); add_edge(3,5);
    add_edge(4,5); add_edge(4,6);
    cout << "Size of Minimum Vertex Cover: " << find_cover(V, E) << endl;
    return 0;
}

আউটপুট

Size of Minimum Vertex Cover: 2
  1. C++-এ নির্দিষ্ট সাইজের সাবঅ্যারের সর্বাধিক (ন্যূনতম) যোগফল

  2. সি++-এ kটি সাবলিস্টে ভাগ করে সর্বনিম্ন সর্বাধিক যোগফল খুঁজে বের করার প্রোগ্রাম

  3. C++-এ বাইনারি সার্চ ট্রিতে ইনঅর্ডার সাকসেসর খুঁজে বের করা

  4. বাইনারি সার্চ C++ প্রোগ্রামে