Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

DFS का उपयोग करके जांचें कि दिया गया ग्राफ बाइपार्टाइट है या नहीं (C++ में)


एक बाइपार्टाइट ग्राफ एक ग्राफ है जिसमें यदि ग्राफ कलरिंग केवल दो रंगों का उपयोग करके संभव है यानी; एक सेट में वर्टेक्स को उसी रंग से रंगा जाता है। यह C++ प्रोग्राम DFS का उपयोग करके जांचता है कि ग्राफ बाइपार्टाइट है या नहीं।

एल्गोरिदम

Begin    एक ऐरे color[] का उपयोग प्रत्येक नोड के लिए 0 या 1 संग्रहीत करने के लिए किया जाता है जो विपरीत रंगों को दर्शाता है।    किसी भी नोड से फंक्शन DFS कॉल करें।    यदि नोड w पहले विज़िट नहीं किया गया है, तो !color[v] को color[w] असाइन करें और w से जुड़े नोड्स को विज़िट करने के लिए फिर से DFS कॉल करें।    यदि किसी भी उदाहरण में, color[u], !color[v] के बराबर है, तो नोड बाइपार्टाइट है।    DFS फंक्शन को संशोधित करें End

उदाहरण

#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); //ग्राफ के वर्टेक्स को 2 रंगों से रंगने के लिए    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++ में जांचें कि दिया गया ट्री ग्राफ रैखिक है या नहीं C++ में जांचें कि दिया गया ट्री ग्राफ रैखिक है या नहीं

    यहां हम देखेंगे कि ट्री ग्राफ रैखिक है या नहीं, इसकी जांच कैसे करें। एक रैखिक ट्री ग्राफ को एक ही पंक्ति में व्यक्त किया जा सकता है। मान लीजिए यह एक रैखिक ट्री ग्राफ का उदाहरण है।लेकिन यह रैखिक नहीं है -किसी ग्राफ की जांच करने के लिए कि वह रैखिक है या नहीं, हम दो शर्तों का पालन कर सकते हैं:यदि नोड्स

  1. C++ प्रोग्राम: DFS का उपयोग करके अनडायरेक्टेड ग्राफ की कनेक्टिविटी जांचना C++ प्रोग्राम: DFS का उपयोग करके अनडायरेक्टेड ग्राफ की कनेक्टिविटी जांचना

    ग्राफ की कनेक्टिविटी जांचने के लिए, हम किसी भी ट्रैवर्सल एल्गोरिदम का उपयोग करके सभी नोड्स को ट्रैवर्स करने का प्रयास करेंगे। ट्रैवर्सल पूरा होने के बाद, यदि कोई नोड है, जो विजिट नहीं हुआ है, तो ग्राफ कनेक्टेड नहीं है। अनडायरेक्टेड ग्राफ के लिए, हम एक नोड चुनेंगे और उससे ट्रैवर्स करेंगे। इस मामले

  1. C++ प्रोग्राम: DFS का उपयोग करके निर्देशित ग्राफ की कनेक्टिविटी जांचना C++ प्रोग्राम: DFS का उपयोग करके निर्देशित ग्राफ की कनेक्टिविटी जांचना

    ग्राफ की कनेक्टिविटी जांचने के लिए, हम किसी भी ट्रैवर्सल एल्गोरिदम का उपयोग करके सभी नोड्स को पार करने का प्रयास करेंगे। ट्रैवर्सल पूरा होने के बाद, यदि कोई नोड है, जिसे विज़िट नहीं किया गया है, तो ग्राफ जुड़ा हुआ नहीं है। निर्देशित ग्राफ के लिए, हम कनेक्टिविटी जांचने के लिए सभी नोड्स से ट्रैवर्स