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

निर्देशित ग्राफ में चक्र का पता लगाएं


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

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

निर्देशित ग्राफ में चक्र का पता लगाएं

इस दृष्टिकोण में, हम DFS ट्रैवर्सल करने के लिए नोड्स को असाइन करने के लिए विभिन्न सेटों का उपयोग करेंगे। तीन अलग-अलग सेट हैं: व्हाइट, ग्रे और ब्लैक। प्रारंभ में, सभी नोड्स व्हाइट सेट के अंदर संग्रहीत होंगे। जब एक नया नोड पार किया जाता है, तो इसे ग्रे सेट में संग्रहीत किया जाएगा और व्हाइट से हटा दिया जाएगा। और बैकट्रैकिंग पूरा होने के बाद, जब उस नोड के लिए कार्य पूरा हो जाता है, तो इसे ग्रे से ब्लैक सेट में स्वैप किया जाएगा।

इनपुट और आउटपुट

इनपुट: आसन्नता मैट्रिक्स। 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 आउटपुट: ग्राफ में चक्र है।

एल्गोरिदम

dfs(curr, wSet, gSet, bSet)

इनपुट: वर्तमान नोड, व्हाइट, ग्रे और ब्लैक सेट।

आउटपुट: यदि चक्र है तो सच।

शुरू     curr को व्हाइट सेट से हटाएं और ग्रे सेट में जोड़ें     ग्राफ में curr से जुड़े सभी नोड्स v के लिए, करें       यदि v ब्लैक सेट में है, तो         अगले भाग को छोड़ें, और अगले पुनरावृत्ति के लिए जाएं       यदि v ग्रे सेट में है, तो         वापस करें सच       यदि dfs(v, wSet, gSet, bSet) सच है, तो         वापस करें सच     किया     curr को ग्रे सेट से हटाएं और ब्लैक सेट में जोड़ें     वापस करें गलत अंत

hasCycle(graph)

इनपुट: दिया गया ग्राफ।

आउटपुट: जब ग्राफ में चक्र हो तो सच।

शुरू     प्रारंभ में सभी नोड्स को व्हाइट सेट में डालें     जब व्हाइट सेट में कुछ तत्व हों, करें       ग्राफ में सभी नोड्स v के लिए, करें         यदि v व्हाइट सेट में नहीं है, तो           यदि dfs(v, wSet, gSet, bSet), तो             वापस करें सच       किया     किया     वापस करें गलत अंत

उदाहरण

#include<iostream> #include<set> #define NODE 5 using namespace std; int graph[NODE][NODE] = {     {0, 1, 0, 0, 0},     {0, 0, 0, 0, 0},     {1, 0, 0, 1, 0},     {0, 0, 0, 0, 1},     {0, 0, 1, 0, 0} }; bool dfs(int curr, set<int>&wSet, set<int>&gSet, set<int>&bSet) {     //curr को व्हाइट सेट से ग्रे सेट में ले जाना।     wSet.erase(wSet.find(curr));     gSet.insert(curr);     for(int v = 0; v < NODE; v++) {       if(graph[curr][v] != 0) {       //सभी पड़ोसी शीर्षों के लिए         if(bSet.find(v) != bSet.end())           continue;       //यदि शीर्ष ब्लैक सेट में हैं         if(gSet.find(v) != gSet.end())           return true;       //यह एक चक्र है         if(dfs(v, wSet, gSet, bSet))           return true;       //चक्र मिला       }     }     //v को ग्रे सेट से ब्लैक सेट में ले जाना।     gSet.erase(gSet.find(curr));     bSet.insert(curr);     return false; } bool hasCycle() {     set<int> wSet, gSet, bSet;       //तीन सेट व्हाइट, ग्रे और ब्लैक के रूप में     for(int i = 0; i 0) {       for(int current = 0; current < NODE; current++) {         if(wSet.find(current) != wSet.end())           if(dfs(current, wSet, gSet, bSet))             return true;       }     }     return false; } int main() {     bool res;     res = hasCycle();     if(res)       cout << "The graph has cycle." << endl;     else       cout << "The graph has no cycle." << endl; }

आउटपुट

The graph has cycle.

  1. Python में निर्देशित ग्राफ में सबसे बड़ा रंग मान ज्ञात करें Python में निर्देशित ग्राफ में सबसे बड़ा रंग मान ज्ञात करें

    एक निर्देशित ग्राफ दिया गया है जिसमें n रंगीन नोड्स और m एज हैं। प्रत्येक नोड का एक रंग (लोअरकेस अक्षर) है। एक वैध पथ नोड्स का अनुक्रम है जहां प्रत्येक नोड से अगले में निर्देशित एज है। पथ का रंग उस पथ में सबसे अधिक बार आने वाला नोड रंग है। सबसे बड़े रंग मान वाले वैध पथ को खोजें। यदि ग्राफ में साइकिल

  1. पायथन में निर्देशित ग्राफ को उलटने का प्रोग्राम पायथन में निर्देशित ग्राफ को उलटने का प्रोग्राम

    मान लीजिए हमारे पास एक निर्देशित ग्राफ है, हमें इसका उल्टा ढूंढना है ताकि यदि एक किनारा u से v तक जाता है, तो अब यह v से u तक जाए। यहां इनपुट एक एडजेंसी सूची होगी, और यदि n नोड्स हैं, तो नोड्स (0, 1, ..., n-1) होंगे।इसलिए, यदि इनपुट इस तरह हैतो आउटपुट होगाइसे हल करने के लिए, हम इन चरणों का पालन करें

  1. पायथन प्रोग्राम: निर्देशित ग्राफ में चक्र का पता लगाएं पायथन प्रोग्राम: निर्देशित ग्राफ में चक्र का पता लगाएं

    इस लेख में हम दी गई समस्या के समाधान के बारे में जानेंगे। समस्या कथन हमें एक निर्देशित ग्राफ दिया गया है, हमें जांचना है कि ग्राफ में चक्र है या नहीं। आउटपुट सच होना चाहिए यदि दिया गया ग्राफ कम से कम एक चक्र रखता है, अन्यथा गलत। उदाहरण # collections मॉड्यूल from collections import defaultdict # ग्र