एक दूसरे से उनके कनेक्शन वाले कमरों की सूची होने से, मुझे अलग-अलग कमरे समूह कैसे मिलेंगे?


9

मैं एक छोटी सी रग्ग्युलाइक बनाने की कोशिश कर रहा हूँ और जहाँ तक रैंडम जेनरेटिंग रूम और कॉरिडोर की बात है। प्रत्येक कमरा एक अस्थिर वस्तु है और गलियारे से जुड़े अन्य कमरों की एक सरणी सूची में शामिल है।

मैं असंबद्ध कमरों को एकल कर सकता हूं, लेकिन मैं उन कमरों को कैसे जान सकता हूं जो केवल एक-दूसरे से जुड़े हुए हैं, लेकिन दूसरों के अधिकांश से नहीं, एक द्वीप बना रहे हैं?

यहाँ बेहतर समस्या को चित्रित करने के लिए सांत्वना से दलित स्तर पर एक छवि है। कमरे 5 और 6 केवल एक दूसरे से जुड़े हुए हैं। उस का पता लगाने के लिए मैं किस एल्गोरिथ्म का उपयोग कर सकता हूं?

यहाँ छवि विवरण दर्ज करें


छवि का उपयोग करने में समस्या? वह पास्टबिन लिंक केवल एक महीने तक चलेगा।
MichaelHouse

हाँ, मुझे पहले समझ में नहीं आया कि आपने यहाँ क्या किया। क्षमा करें, मैंने आपका परिवर्तन वापस कर दिया।
पेट्रवाज़

1
आप इसका निर्माण क्यों नहीं करते हैं कि पहली जगह में कोई अलग कमरा नहीं हो सकता है? या क्या आप चाहते हैं कि अलग-अलग सेट हों?
अल्बेअमकीर

@AlbeyAmakiir जैसा कि मैंने नीचे एक और टिप्पणी पर कहा था, मैं नक्शे को भरने तक परीक्षण और त्रुटि द्वारा अलग से कमरे उत्पन्न करता हूं, तभी मैं कनेक्ट करने के लिए एक रूटीन चलाता हूं, और फिर उन द्वीपों को जोड़ने के लिए एक और चलाऊंगा। मुझे पता है कि यह शायद बहुत जटिल है लेकिन एक और तरीका नहीं समझ सकता।
पेट्रोवाज

जवाबों:


14

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

फिर आप पूरी सूची के अवशेषों से एक कमरे का चयन करके, और फिर से नेविगेट करके जारी रख सकते हैं। इस बार बी सूची में जोड़ने । इस प्रक्रिया को तब तक जारी रखें जब तक कि आपके पास मूल सूची पर अधिक कमरे न हों। अब आपके पास सभी कनेक्टेड रूम सेट की सूची है।

इस तरह की समस्याएं आसानी से ग्राफ सिद्धांत की समस्याओं के अनुकूल हो जाती हैं। उदाहरण के लिए, आपके द्वारा ऊपर वर्णित समस्या कनेक्टिविटी से सीधे संबंधित है ।


1
किसी भी खोज ट्री एल्गोरिदम को काम करना चाहिए। इस समस्या से बचने के लिए आप या आप अपनी पीढ़ी के एल्गोरिथ्म को बदल सकते हैं। यदि आप अपनी पीढ़ी के एल्गोरिथ्म को बदलते हैं, तो बस अपने शुरुआती कमरे से जुड़ी एक यादृच्छिक संख्या उत्पन्न करते हैं, तो निम्न में से प्रत्येक में एक यादृच्छिक संख्या में कमरे जुड़े होते हैं, तो आप मौजूदा कमरों के बीच कुछ यादृच्छिक कनेक्शनों को शॉर्टकट के साथ चीजों को थोड़ा सा जोड़ सकते हैं। और ऐसा। व्यक्तिगत रूप से मैं अभी एक खोज ट्री एल्गोरिथ्म करूँगा।
बेंजामिन खतरे जॉनसन

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

@BenjaminDangerJohnson आपकी टिप्पणी प्रश्न के लिए अधिक उपयुक्त लगती है और इस उत्तर के लिए नहीं।
MichaelHouse

@petervaz कोई समस्या नहीं। मुझे लगता है कि मेरे सीएस डिग्री के उपयोग इसके बाद है।
MichaelHouse

@BenjaminDangerJohnson मेरा जेनरेट करने वाला एल्गोरिदम बस जगह भरने और बाद में कनेक्शन की तलाश में यादृच्छिक कमरे रख रहा है। = P निर्माण को बदलने का सहारा लेने से पहले कनेक्शन को ठीक करने का प्रयास करेगा।
पेट्रवाज़

9

कमरों का आपका संग्रह अनिवार्य रूप से एक ग्राफ है, और आपकी समस्या उस ग्राफ में जुड़े घटक एस ("द्वीप") को खोजने के लिए उबलती है ।

कनेक्टेड घटकों को खोजने का एक सरल तरीका प्रत्येक शीर्ष से बीएफएस (चौड़ाई-पहली खोज) करना है। एक शीर्ष A से BFS करने से आपको जुड़े घटक में सभी कोने मिलेंगे जो कि A से संबंधित है।

तो, मूल रूप से, आप एक मनमाना शीर्ष के साथ शुरू करते हैं, एक बीएफएस करते हैं और प्रत्येक "1" द्वीप के सदस्य के रूप में प्रत्येक सामना किए गए शीर्ष को चिह्नित करते हैं। फिर आप अगले अप्रकाशित शीर्ष पर जाते हैं और फिर से बीएफएस करते हैं, इस बार लेबलिंग में 2 डी "द्वीप" के सदस्यों के रूप में लंबवत का सामना करना पड़ा, और इसी तरह।


4

आप एक निर्देशित ग्राफ पर कमरे को कोने के रूप में चित्रित कर सकते हैं । ऐसा करने से, आप अपनी समस्या को हल करने के लिए अच्छी तरह से ज्ञात एल्गोरिदम लागू कर पाएंगे।

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


1
यहां तक ​​कि एक अप्रत्यक्ष ग्राफ़ भी ऐसा करेगा ... सिवाय आपके पास एक ही रास्ता है।
Aron_dc

@ Aron_dc, आप सही कह रहे हैं, आप अप्रत्यक्ष ग्राफ पर वर्टिकल के रूप में कमरों की तस्वीर ले सकते हैं और क्रुस्कल के एल्गोरिथ्म का उपयोग करके समान परिणाम प्राप्त कर सकते हैं। मैंने सिर्फ यह सुझाव दिया कि जिस तरह से पेट्रवाज़ कनेक्शन का प्रतिनिधित्व करते हैं, उसके कारण इसे निर्देशित ग्राफ के रूप में चित्रित किया गया है - यानी, रूम 1> 3
17
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.