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

C++ প্রোগ্রাম: ডাইরেক্টেড গ্রাফ Weakly Connected নাকি Strongly Connected চেক করা


একটি ডাইরেক্টেড গ্রাফ Weakly Connected নাকি Strongly Connected তা DFS ব্যবহার করে বের করা যায়।

ব্যবহৃত ফাংশন

Begin
    Function fillorder() = সব ভার্টেক্স স্ট্যাকে পুশ করুন।
    a) বর্তমান নোডকে ভিজিটেড মার্ক করুন।
    b) এই ভার্টেক্সের সাথে অadyacent সকল ভার্টেক্সের জন্য রিকার্সিভ কল করুন।
    c) v-থেকে পৌঁছানো সকল ভার্টেক্স প্রসেসড হলে, v-কে স্ট্যাকে পুশ করুন।
End
Begin
    Function DFS():
    a) বর্তমান নোডকে ভিজিটেড মার্ক করুন।
    b) এই ভার্টেক্সের সাথে অadyacent সকল ভার্টেক্সের জন্য রিকার্সিভ কল করুন।
End

উদাহরণ

#include <iostream>
#include <list>
#include <stack>
using namespace std;

class G {
    int m;
    list *adj;
    void fillOrder(int n, bool visited[], stack &Stack);
    void DFS(int n, bool visited[]);
public:
    G(int N);
    void addEd(int v, int w);
    int print();
    G getTranspose();
};

G::G(int m) {
    this->m = m;
    adj = new list[m];
}

void G::DFS(int n, bool visited[]) {
    visited[n] = true;
    cout << n << " ";
    list::iterator i;
    for (i = adj[n].begin(); i != adj[n].end(); ++i)
        if (!visited[*i])
            DFS(*i, visited);
}

G G::getTranspose() {
    G g(m);
    for (int n = 0; n < m; n++) {
        list::iterator i;
        for (i = adj[n].begin(); i != adj[n].end(); ++i)
            g.adj[*i].push_back(n);
    }
    return g;
}

void G::addEd(int v, int w) {
    adj[v].push_back(w);
}

void G::fillOrder(int v, bool visited[], stack &Stack) {
    visited[v] = true;
    list::iterator i;
    for (i = adj[v].begin(); i != adj[v].end(); ++i)
        if (!visited[*i])
            fillOrder(*i, visited, Stack);
    Stack.push(v);
}

int G::print() {
    stack Stack;
    bool *visited = new bool[m];
    for (int i = 0; i < m; i++) visited[i] = false;
    for (int i = 0; i < m; i++)
        if (visited[i] == false)
            fillOrder(i, visited, Stack);
    G graph = getTranspose();
    for (int i = 0; i < m; i++) visited[i] = false;
    int count = 0;
    while (Stack.empty() == false) {
        int v = Stack.top();
        Stack.pop();
        if (visited[v] == false) {
            graph.DFS(v, visited);
            cout << endl;
        }
        count++;
    }
    return count;
}

int main() {
    G g(5);
    g.addEd(2, 1);
    g.addEd(3, 2);
    g.addEd(1, 0);
    g.addEd(0, 3);
    g.addEd(3, 1);
    cout << "Following are strongly connected components in given graph \n";
    if (g.print() > 1)
        cout << "Graph is weakly connected.";
    else
        cout << "Graph is strongly connected.";
    return 0;
}

আউটপুট

Following are strongly connected components in given graph
4
0 1 2 3
Graph is weakly connected.

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

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

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

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