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

সি++ প্রোগ্রাম: DFS ব্যবহার করে ডিরেক্টেড গ্রাফ ট্রি (Tree) কিনা তা যাচাই

একটি গ্রাফ ট্রি (Tree) হয় যদি সেটিতে কোনো সাইকেল (Cycle) না থাকে। এটি একটি সি++ প্রোগ্রাম যা DFS ব্যবহার করে একটি ডিরেক্টেড গ্রাফ ট্রি কিনা তা যাচাই করে।

অ্যালগরিদম

শুরু ফাংশন cyclicUtil() :    ক) বর্তমান নোডকে ভিজিটেড এবং রিকার্শন স্ট্যাকের অংশ হিসেবে চিহ্নিত করুন    খ) এই ভের্টেক্সের সাথে সংযুক্ত সব ভের্টেক্সের জন্য পুনরাবৃত্তি করুন।    গ) রিকার্শন স্ট্যাক থেকে ভের্টেক্সটি সরিয়ে দিন। ফাংশন cyclic() :    ক) সব ভের্টেক্সকে ভিজিট না করা এবং রিকার্শন স্ট্যাকের অংশ না হওয়া হিসেবে চিহ্নিত করুন    খ) সাইকেল ডিটেক্ট করতে CyclicUtil() ফাংশনটি কল করুন ভিন্ন ট্রিতে। শেষ

উদাহরণ

#include<iostream> #include <list> #include <limits.h> using namespace std; class G {    int n;    list<int> *adj; //সংলগ্ন লিস্ট ধারণ করে।    bool CyclicUtil(int v, bool visited[], bool *rs);    public:       G(int V); // কনস্ট্রাক্টর       void addEd(int v, int w);       bool cyclic(); }; G::G(int n) {    this->n = n;    adj = new list<int> [n]; } void G::addEd(int v, int u) //গ্রাফে এজ যোগ করুন {    adj[v].push_back(u); //u'কে v-এর লিস্টে যোগ করুন } bool G::CyclicUtil(int v, bool visited[], bool *recurS) {    if (visited[v] == false) {       visited[v] = true; //বর্তমান নোডকে ভিজিটেড এবং রিকার্শন স্ট্যাকের অংশ হিসেবে চিহ্নিত করুন       recurS[v] = true;       // এই ভের্টেক্সের সাথে সংযুক্ত সব ভের্টেক্সের জন্য পুনরাবৃত্তি করুন।       list<int>::iterator i;       for (i = adj[v].begin(); i != adj[v].end(); ++i) {          if (!visited[*i] && CyclicUtil(*i, visited, recurS))             return true;          else if (recurS[*i])             return true;       }    }    recurS[v] = false; //ভের্টেক্সটি রিকার্শন স্ট্যাক থেকে সরিয়ে দিন।    return false; } //গ্রাফটি ট্রি কিনা তা চেক করুন bool G::cyclic() {    //সব ভের্টেক্সকে ভিজিট না করা এবং রিকার্শন স্ট্যাকের অংশ না হওয়া হিসেবে চিহ্নিত করুন    bool *visited = new bool[n];    bool *recurS = new bool[n];    for (int i = 0; i < n; i++) {       visited[i] = false;       recurS[i] = false;    }    // ভিন্ন ট্রিতে সাইকেল ডিটেক্ট করতে CyclicUtil() ফাংশনটি কল করুন    for (int i = 0; i < n; i++)       if (CyclicUtil(i, visited, recurS))          return true;          return false; } int main() {    G g(4);    g.addEd(0, 2);    g.addEd(1, 2);    g.addEd(2, 0);    g.addEd(3, 2);    if (g.cyclic())       cout << "Directed Graph isn't a tree";    else       cout << "Directed Graph is a tree";       return 0; }

আউটপুট

Directed Graph isn't a tree
  1. C++ প্রোগ্রাম: DFS ব্যবহার করে অনডিরেক্টেড গ্রাফের কানেক্টিভিটি চেক করা

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

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

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