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

C++ में डायरेक्टेड ग्राफ़ कनेक्टेड है या नहीं जांचें


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

C++ में डायरेक्टेड ग्राफ़ कनेक्टेड है या नहीं जांचें

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

इस केस में ट्रैवर्सल एल्गोरिदम रिकर्सिव DFS ट्रैवर्सल है।

इनपुट - ग्राफ़ का एडजेंसी मैट्रिक्स

01000
00100
00011
10000
01000

आउटपुट - ग्राफ़ कनेक्टेड है।

एल्गोरिदम

traverse(u, visited) इनपुट: स्टार्ट नोड u और विज़िटेड नोड जिससे पता चले कि कौन सा नोड विज़िट हुआ है। आउटपुट: सभी कनेक्टेड वर्टेक्स ट्रैवर्स करें। Begin    u को विज़िटेड मार्क करें    सभी वर्टेक्स v के लिए, यदि u के साथ एडजेसेंट है, तो       यदि v विज़िटेड नहीं है, तो          traverse(v, visited)    done End isConnected(graph) इनपुट: ग्राफ़। आउटपुट: यदि ग्राफ़ कनेक्टेड है तो True। Begin    विज़िटेड ऐरे डिफाइन करें    ग्राफ़ में सभी वर्टेक्स u के लिए, करें       सभी नोड्स को अनविज़िटेड बनाएं       traverse(u, visited)       यदि कोई अनविज़िटेड नोड अभी भी शेष है, तो          return false    done    return true End

उदाहरण

#include<iostream> #define NODE 5 using namespace std; int graph[NODE][NODE] = {{0, 1, 0, 0, 0},    {0, 0, 1, 0, 0},    {0, 0, 0, 1, 1},    {1, 0, 0, 0, 0},    {0, 1, 0, 0, 0} }; void traverse(int u, bool visited[]){    visited[u] = true; //v को विज़िटेड मार्क करें    for(int v = 0; v<NODE; v++){       if(graph[u][v]){          if(!visited[v])          traverse(v, visited);       }    } } bool isConnected(){    bool *vis = new bool[NODE];    //सभी वर्टेक्स u को स्टार्ट पॉइंट मानकर जांचें कि सभी नोड्स विज़िबल हैं या नहीं    for(int u = 0; u < NODE; u++){       for(int i = 0; i<NODE; i++)       vis[i] = false; //इनिशियलाइज़ करें कि कोई नोड विज़िटेड नहीं है       traverse(u, vis);       for(int i = 0; i<NODE; i++){          if(!vis[i]) //यदि कोई नोड ट्रैवर्सल द्वारा विज़िट नहीं हुआ, तो ग्राफ़ कनेक्टेड नहीं है          return false;       }    }    return true; } int main(){    if(isConnected())    cout << "The Graph is connected.";    else    cout << "The Graph is not connected."; }

आउटपुट

The Graph is connected.

  1. C++ प्रोग्राम: जांचें कि क्या एक निर्देशित ग्राफ में यूलरियन चक्र है C++ प्रोग्राम: जांचें कि क्या एक निर्देशित ग्राफ में यूलरियन चक्र है

    यूलर चक्र/सर्किट एक पथ है; जिसके द्वारा हम प्रत्येक एज को ठीक एक बार देख सकते हैं। हम एक ही वर्टेक्स का कई बार उपयोग कर सकते हैं। यूलर सर्किट यूलर पथ का एक विशेष प्रकार है। जब यूलर पथ का प्रारंभिक वर्टेक्स उस पथ के अंतिम वर्टेक्स से भी जुड़ा होता है, तो इसे यूलर सर्किट कहा जाता है। यह जांचने के लि

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

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

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

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