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

C++ প্রোগ্রাম: BFS ব্যবহার করে অনডিরেক্টেড গ্রাফের কানেক্টিভিটি চেক করা

একটি গ্রাফের কানেক্টিভিটি চেক করতে, আমরা যেকোনো ট্রাভার্সাল অ্যালগরিদম ব্যবহার করে সব নোড ট্রাভার্স করার চেষ্টা করব। ট্রাভার্সাল শেষে, যদি কোনো নোড থাকে যা ভিজিটেড নয়, তবে গ্রাফটি কানেক্টেড নয়।

C++ প্রোগ্রাম: BFS ব্যবহার করে অনডিরেক্টেড গ্রাফের কানেক্টিভিটি চেক করা

অনডিরেক্টেড গ্রাফের জন্য, আমরা একটি নোড সিলেক্ট করব এবং সেটি থেকে ট্রাভার্স শুরু করব।

এই কেসে ট্রাভার্সাল অ্যালগরিদম হলো রিকারসিভ BFS ট্রাভার্সাল।

ইনপুট - একটি গ্রাফের অ্যাডজেসেন্সি ম্যাট্রিক্স

01100
10110
11011
01101
00110

আউটপুট - The Graph is connected.

অ্যালগরিদম

traverse(s, visited)

ইনপুট - স্টার্ট নোড s এবং ভিজিটেড নোড যাতে কোন নোড ভিজিটেড সেটি মার্ক করা যায়।

আউটপুট - ট্রাভার্স করা সব কানেক্টেড ভার্টেক্স।

শুরু
s কে ভিজিটেড মার্ক করুন
s কে একটি কিউ Q-তে ইনসার্ট করুন
যতক্ষণ Q খালি নয়, করুন
  u = কিউ থেকে বের করা নোড
  গ্রাফের প্রতিটি নোড v এর জন্য, করুন
    if u এবং v কানেক্টেড, তবে
      if u ভিজিটেড নয়, তবে
        u কে ভিজিটেড মার্ক করুন
        u কে কিউ Q-তে ইনসার্ট করুন।
  লুপ শেষ
লুপ শেষ
শেষ

isConnected(graph)

ইনপুট - গ্রাফ।

আউটপুট - True যদি গ্রাফ কানেক্টেড হয়।

শুরু
visited অ্যারে ডিফাইন করুন
গ্রাফের সব ভার্টেক্স u এর জন্য, করুন
  সব নোড আনভিজিটেড করুন
  traverse(u, visited)
  যদি কোনো আনভিজিটেড নোড থাকে, তবে
    return false
লুপ শেষ
return true
শেষ

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

#include<iostream>
#include<queue>
#define NODE 5
using namespace std;

int graph[NODE][NODE] = {
    {0, 1, 1, 0, 0},
    {1, 0, 1, 1, 0},
    {1, 1, 0, 1, 1},
    {0, 1, 1, 0, 1},
    {0, 0, 1, 1, 0}
};

void traverse(int s, bool visited[]) {
    visited[s] = true; // v কে ভিজিটেড মার্ক
    queue<int> que;
    que.push(s); // s কে কিউতে ইনসার্ট
    while(!que.empty()) {
        int u = que.front(); // কিউ থেকে ডিলিট করুন
        que.pop();
        for(int i = 0; i < NODE; i++) {
            if(graph[i][u]) {
                // যখন নোড আনভিজিটেড
                if(!visited[i]) {
                    visited[i] = true;
                    que.push(i);
                }
            }
        }
    }
}

bool isConnected() {
    bool *vis = new bool[NODE];
    for(int u = 0; u < NODE; u++) {
        for(int i = 0; i < NODE; i++)
            vis[i] = false; // ইনিশিয়ালাইজ: কোনো নোড ভিজিটেড নয়
        traverse(u, vis);
        for(int i = 0; i < NODE; i++) {
            if(!vis[i]) // যদি কোনো নোড ট্রাভার্সালে ভিজিটেড নয়, গ্রাফ কানেক্টেড নয়
                return false;
        }
    }
    return true;
}

int main() {
    if(isConnected()) cout << "The Graph is connected.";
    else cout << "The Graph is not connected.";
}

আউটপুট

The Graph is connected.
  1. C++ প্রোগ্রাম: DFS ব্যবহার করে অনডিরেক্টেড গ্রাফের কানেক্টিভিটি চেক করা

  2. C++ প্রোগ্রাম: BFS ব্যবহার করে ডিরেক্টেড গ্রাফের কানেক্টিভিটি চেক করা

  3. C++ প্রোগ্রাম: নির্দেশিত গ্রাফে অয়লার চক্র আছে কিনা যাচাই

  4. C++ প্রোগ্রাম: DFS ব্যবহার করে নির্দেশিত গ্রাফের কানেক্টিভিটি যাচাই