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

C++-এ নির্দেশিত গ্রাফ সংযুক্ত কিনা তা যাচাই করা

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

C++-এ নির্দেশিত গ্রাফ সংযুক্ত কিনা তা যাচাই করা

নির্দেশিত গ্রাফের জন্য, আমরা সমস্ত নোড থেকে ট্রাভার্সাল শুরু করব সংযোগযোগ্যতা যাচাই করার জন্য। কখনও কখনও একটি এজের শুধু আউটওয়ার্ড এজ থাকতে পারে কিন্তু ইনওয়ার্ড এজ নেই, তাই সেই নোডটি অন্য যেকোনো স্টার্টিং নোড থেকে অনভিজিটেড থাকবে।

এই ক্ষেত্রে ট্রাভার্সাল অ্যালগরিদম হল রিকারসিভ DFS ট্রাভার্সাল।

ইনপুট

একটি গ্রাফের এডজেসেন্সি ম্যাট্রিক্স

01000
00100
00011
10000
01000

আউটপুট

গ্রাফটি সংযুক্ত।

অ্যালগরিদম

traverse(u, visited) 
ইনপুট: স্টার্ট নোড u এবং ভিজিটেড নোড অ্যারে যা কোন নোড ভিজিটেড সেটা মার্ক করে। 
আউটপুট: সমস্ত সংযুক্ত ভের্টেক্স ট্রাভার্স করা। 
শুরু 
    u কে ভিজিটেড হিসেবে মার্ক করো
    u-এর সাথে এডজেসেন্ট সকল ভের্টেক্স v জন্য, করো
        যদি v ভিজিটেড না হয়, তবে
            traverse(v, visited)
        শেষ যদি
    শেষ ফর
শেষ

isConnected(graph) 
ইনপুট: গ্রাফ। 
আউটপুট: গ্রাফ সংযুক্ত হলে True। 
শুরু 
    visited অ্যারে ডিফাইন করো
    গ্রাফের সকল ভের্টেক্স u জন্য, করো
        সকল নোডকে অনভিজিটেড বানাও
        traverse(u, visited)
        যদি কোনো অনভিজিটেড নোড অবশিষ্ট থাকে, তবে
            false রিটার্ন করো
        শেষ যদি
    শেষ ফর
    true রিটার্ন করো
শেষ

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

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

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

void traverse(int u, bool visited[]) {
    visited[u] = true; // v কে ভিজিটেড হিসেবে মার্ক করো
    for(int v = 0; v < NODE; v++) {
        if(graph[u][v]) {
            if(!visited[v])
                traverse(v, visited);
        }
    }
}

bool isConnected() {
    bool *vis = new bool[NODE];
    // সব ভের্টেক্স u কে স্টার্ট পয়েন্ট হিসেবে ধরে চেক করো যে সকল নোড ভিজিবল কিনা
    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++ প্রোগ্রাম: BFS ব্যবহার করে অনডিরেক্টেড গ্রাফের কানেক্টিভিটি চেক করা

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

  3. C++ প্রোগ্রাম: গ্রাফ স্ট্রংলি কানেক্টেড কিনা যাচাই

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