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

গ্রাফ বাইপার্টাইট কিনা তা যাচাই করা (Check if Graph is Bipartite)

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

গ্রাফ বাইপার্টাইট কিনা তা যাচাই করা (Check if Graph is Bipartite)

বাইপার্টাইট গ্রাফ যাচাই করা সম্ভব ভার্টেক্স কালারিং ব্যবহার করে। যখন একটি ভার্টেক্স একই সেটে থাকে, তখন उसका একই রঙ থাকে, অন্য সেটের জন্য রঙটি পরিবর্তন হয়।

গ্রাফ বাইপার্টাইট কিনা তা যাচাই করা (Check if Graph is Bipartite)

ইনপুট এবং আউটপুট

ইনপুট: অ্যাডজেসেন্সি ম্যাট্রিক্স।
0 1 1 1 0 0
1 0 0 1 1 0
1 0 0 1 0 1
1 1 1 0 1 1
0 1 0 1 0 1
0 0 1 1 1 0
আউটপুট: গ্রাফটি বাইপার্টাইট।

এলগরিদম

isBipartite(source)

ইনপুট: সোর্স ভার্টেক্স।
আউটপুট: গ্রাফ বাইপার্টাইট হলে true।

শুরু
  একটি খালি কিউ qu এবং একটি কালার লিস্ট colorArray সংজ্ঞায়িত করুন
  প্রাথমিকভাবে কোনো নোড যেকোনো রঙে কালার করা নেই
  সোর্স ভার্টেক্সকে লাল রঙ দিন
  সোর্সকে qu-তে যোগ করুন
  যতক্ষণ qu খালি নয়, করুন
    qu থেকে আইটেম সরিয়ে u-তে নিন
    যদি কোনো সেলফ-লুপ থাকে, তবে
      return false
    u-র সাথে সংযুক্ত সব ভার্টেক্স v এর জন্য, করুন
      যদি v-র কোনো রঙ নেই, তবে
        যদি colorArray[u] = red, তবে
          colorArray[v] := blue
        অন্যথায় যদি colorArray[u] = blue, তবে
          colorArray[v] := red
        v কে কিউতে যোগ করুন
      যদি colorArray[v] = colorArray[u], তবে
        return false
    শেষ লুপ
  শেষ লুপ
  return true
শেষ

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

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

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

bool isBipartite(int source) {
  queue<int> qu;
  string colorArray[NODE];
  for(int i = 0; i < NODE; i++)
    colorArray[i] = "No Color";  // প্রাথমিকভাবে সব ভার্টেক্সের জন্য কোনো রঙ সেট করা নেই
  colorArray[source] = "Red";    // সোর্স ভার্টেক্সের সাথে লাল রঙ অ্যাসাইন করুন
  qu.push(source);               // সোর্সকে কিউতে যোগ করুন
  while(!qu.empty()) {
    int u = qu.front(); qu.pop();
    if(graph[u][u] == 1)  // সেলফ-লুপ আছে
      return false;
    for(int v = 0; v < NODE; v++) {
      if(graph[u][v] != 0 && colorArray[v] == "No Color") {
        if(colorArray[u] == "Red")  // সন্নিহিত লিস্টকে أل্টারনেট রঙ দিন
          colorArray[v] = "Blue";
        else if(colorArray[u] == "Blue")
          colorArray[v] = "Red";
        qu.push(v);  // নতুন সন্নিহিত নোড কিউতে যোগ করুন
      } else if(graph[u][v] != 0 && colorArray[v] == colorArray[u]) {
        return false;  // যখন u এবং সন্নিহিত একই রঙের
      }
    }
  }
  return true;
}

int main() {
  bool check;
  check = isBipartite(0);
  if(check)
    cout << "The graph is bipartite." << endl;
  else
    cout << "The graph is not bipartite." << endl;
}

আউটপুট

The graph is bipartite.
  1. উইন্ডোজ ১০-এ আপডেট हिस्टরি কীভাবে খুঁজে বের করবেন

  2. উইন্ডোজ ১০-এ রাউটারের IP অ্যাড্রেস খুঁজে বের করার পদ্ধতি

  3. উইন্ডোজ ১১ প্রোডাক্ট কী খুঁজে বের করার পদ্ধতি

  4. এক্সেলে সার্চ করার পদ্ধতি