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

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


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

एल्गोरिदम

Begin    1. एक कलर[] ऐरे का उपयोग किया जाता है जो प्रत्येक नोड के लिए 0 या 1 संग्रहीत करता है जो विपरीत रंगों को दर्शाता है।    2. किसी भी नोड से DFS फंक्शन को कॉल करें।    3. यदि नोड w पहले विज़िट नहीं किया गया है, तो !color[v] को color[w] असाइन करें और w से जुड़े नोड्स को विज़िट करने के लिए फिर से DFS कॉल करें।    4. यदि किसी भी स्थिति में, color[u], !color[v] के बराबर है, तो नोड बाइपार्टाइट है।    5. 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++ प्रोग्राम: DFS का उपयोग करके अनडायरेक्टेड ग्राफ की कनेक्टिविटी जांचना C++ प्रोग्राम: DFS का उपयोग करके अनडायरेक्टेड ग्राफ की कनेक्टिविटी जांचना

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

  1. C++ प्रोग्राम: जांचें कि क्या एक ग्राफ दृढ़ता से जुड़ा हुआ है या नहीं C++ प्रोग्राम: जांचें कि क्या एक ग्राफ दृढ़ता से जुड़ा हुआ है या नहीं

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

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

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