2011-10-11 20 views
7

मेरे पास एक एचडब्लू समस्या है जो एक एल्गोरिदम की मांग करती है जो यह पता लगाती है कि किसी भी अप्रत्यक्ष ग्राफ में कोई चक्र है जिसमें कोई भी किनारा 'ई' है। एल्गोरिदम ओ (एन) रैखिक समय में चलना चाहिए।कैसे जांचें कि किनारे कुछ चक्र में है या नहीं?

मेरी समस्या यह है कि मुझे नहीं पता कि कहां से शुरू करना है। मेरे पास कुछ सरल नमूना ग्राफ हैं लेकिन मुझे नहीं पता कि वहां से कहाँ जाना है।

कोई संकेत?

+1

एक संकेत? ज़रूर। कुछ सेट (जैसे हैशसेट्स) में ओ (1) लुकअप है। – corsiKa

उत्तर

0

आप किनारे 'ई' से शुरू करते हैं। इससे आपको दो अक्षरों को जोड़ना चाहिए। उनमें से आप अन्य किनारों और अन्य शिखर, और अन्य किनारों और अन्य शिखर प्राप्त करते हैं, और ... आपको यह पता लगाने के लिए एक तरीका चाहिए कि क्या आपके एल्गोरिदम द्वारा एक कशेरुका पहले से ही देखी गई है। यदि उसके पास ऐसा चक्र है जो 'ई' का हिस्सा है।

2

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

सूची ट्रैवर्सल के आपके वर्तमान पथ का प्रतिनिधित्व करती है।

यदि आप पहले से ही अपनी सूची में मौजूद नोड में आते हैं, तो एक लूप/चक्र होता है।

0

बढ़त (u, v) के लिए:

1- गहराई पहले खोज यू से शुरू करते हैं, अगर वी पाया जाता है का निर्धारण और एक वापस किनारे वी करने के लिए मार्ग के किनारे मौजूद

2-। वी से एक गहराई पहले खोज करते हैं, यदि u मिल गया और वापस किनारे है यू करने के लिए मौजूद हैं, फिर वहाँ एक चक्र है कि यू और वी।

दूसरे शब्दों में दोनों शामिल हैं,

1- एक डीएफएस यू से शुरू प्रदर्शन है , जांचें कि पिछला किनारा मौजूद है और v अभी तक समाप्त नहीं हुआ है।

2- एक डीएफएस वी से शुरू करते हैं, तो देखें कि क्या वापस किनारे मौजूद हैं और यू अभी तक पूरा नहीं हुआ है, तो दोनों स्थितियों सत्य हैं, तो किनारे (यू, वी) एक चक्र के हैं।

3

जी से उस किनारे (यू, वी) को बाहर निकालें 1. यह देखने के लिए बीएफएस चलाएं कि वी अभी भी आपके पास पहुंच योग्य है या नहीं। 2. यदि हां, तो मूल ग्राफ में एक चक्र होता है जिसमें ई होता है। अन्यथा नहीं है।

संबंधित मुद्दे