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

সি++ প্রোগ্রাম: DFS ব্যবহার করে গ্রাফ দ্বিভাজ্য (Bipartite) কিনা যাচাই

একটি দ্বিভাজ্য গ্রাফ হল এমন গ্রাফ যেখানে গ্রাফ কলারিং (Graph Coloring) দুটি রঙ ব্যবহার করে সম্ভব। অর্থাৎ, একটি সেটের ভের্টেক্সগুলো একই রঙ দিয়ে রঙ করা যায়। এটি একটি সি++ প্রোগ্রাম যা DFS ব্যবহার করে গ্রাফটি দ্বিভাজ্য কিনা তা যাচাই করে।

অ্যালগরিদম

শুরু    ১. একটি color[] অ্যারে ব্যবহার করা হয় যা প্রতিটি নোডের জন্য ০ বা ১ সংরক্ষণ করে যা বিপরীত রঙ নির্দেশ করে।    ২. যেকোনো নোড থেকে DFS ফাংশন কল করুন।    ৩. যদি নোড w আগে ভিজিট না করা থাকে, তবে !color[v] কে color[w]-এ অ্যাসাইন করুন এবং w-র সাথে সংযুক্ত নোডগুলো ভিজিট করতে আবার DFS কল করুন।    ৪. যদি কোনো সময় color[u] সমান হয় !color[v]-এর সাথে, তবে নোডটি দ্বিভাজ্য।    ৫. DFS ফাংশনটি সংশোধন করুন। শেষ

উদাহরণ

#include<iostream> #include <bits/stdc++.h> using namespace std; void addEd(vector<int> adj[], int w, int v) //গ্রাফে এজ যোগ করুন {    adj[w].push_back(v); //w-এর লিস্টে v যোগ করুন    adj[v].push_back(w); //v-এর লিস্টে w যোগ করুন } bool Bipartite(vector<int> adj[], int v, vector<bool>& visited, vector<int>& color) {    for (int w : adj[v]) {       // যদি ভের্টেক্স w আগে এক্সপ্লোর না করা থাকে       if (visited[w] == false) {          // বর্তমান ভের্টেক্সকে ভিজিটেড হিসেবে চিহ্নিত করুন          visited[w] = true;          color[w] = !color[v]; //প্যারেন্টের বিপরীত রঙ দিন          if (!Bipartite(adj, w, visited, color))             return false;       }       // যদি দুটি সংলগ্ন ভের্টেক্স একই রঙে রঙ করা থাকে তবে গ্রাফটি দ্বিভাজ্য নয়          else if (color[w] == color[v])             return false;    }    return true; } int main() {    int M = 6;    vector<int> adj[M + 1];    // একটি নোড আবিষ্কৃত হয়েছে কিনা তা চেক রাখতে    vector<bool> visited(M + 1);    vector<int> color(M + 1); //গ্রাফের ভের্টেক্সগুলো ২ রঙ দিয়ে রঙ করতে    addEd(adj, 3,2);    addEd(adj, 1,4 );    addEd(adj, 2, 1);    addEd(adj, 5,3);    addEd(adj, 6,2);    addEd(adj, 3,1);    visited[1] = true;    color[1] = 0;    if (Bipartite(adj, 1, visited, color)) {       cout << "Graph is Bipartite";    } else {       cout << "Graph is not Bipartite";    }    return 0; }

আউটপুট

Graph is not Bipartite
  1. C++ প্রোগ্রাম: আনডায়রেক্টেড গ্রাফে অয়লার সার্কিট আছে কিনা চেক করা

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

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

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