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

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


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

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

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

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

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

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

एल्गोरिदम

dfs(curr, wSet, gSet, bSet)

इनपुट: वर्तमान नोड, सफ़ेद, धूसर और काला सेट।

आउटपुट: सच है अगर कोई चक्र है।

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

हैसाइकिल(ग्राफ)

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

आउटपुट: सही है जब ग्राफ़ साइकिल चला रहा है।

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

उदाहरण

<पूर्व>#शामिल करें#शामिल करें<सेट>#नेमस्पेस एसटीडी का उपयोग करके नोड 5 परिभाषित करें;इंट ग्राफ[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}}; बूल dfs (int curr, set&wSet, set&gSet, set&bSet) {// कर्व को सफेद से ग्रे सेट में ले जाना। wSet.erase(wSet.find(curr)); gSet.insert(curr); for(int v =0; v डब्ल्यूसेट, जीसेट, बीसेट; // सफेद, ग्रे और काले के रूप में तीन सेट (int i =0; i 0) {के लिए (int current =0; current

आउटपुट

ग्राफ़ में चक्र होता है।

  1. पायथन में निर्देशित ग्राफ में सबसे बड़ा रंग मान खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास n रंगीन नोड्स और m विभिन्न किनारों के साथ एक निर्देशित ग्राफ है। और नोड्स 0 से n-1 तक गिने जाते हैं। हमारे पास लोअरकेस अक्षरों वाला एक स्ट्रिंग कॉल है, जहां col[i] इस ग्राफ (0-अनुक्रमित) में ith नोड के रंग का प्रतिनिधित्व करता है। हमारे पास एक किनारे की सूची भी है जहां किनारों

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

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

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

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