सुनिश्चित करें कि लिफ्टों के साथ घर का नक्शा भूलभुलैया हल किया जा सकता है?


13

मेरे खेल में हम किनारे से एक घर के फर्श को देखते हैं, और नायक लिफ्ट ले सकता है - एक लिफ्ट या तो ऊपर जाती है (अगले लिफ्ट तक ऊपर की ओर), या नीचे (अगले लिफ्ट के नीचे की तरफ), तीर के आधार पर दिखाया गया है, और हमेशा जुड़े दो लिफ्टों की एक जोड़ी है। यही एकमात्र तरीका है कि नायक लंबवत रूप से आगे बढ़ सकता है, हालांकि वह स्वतंत्र रूप से क्षैतिज रूप से आगे बढ़ सकता है। घर का नक्शा अलग-अलग वस्तुओं के साथ एक यादृच्छिक 11x5 ग्रिड है, और दूर से बाईं ओर, और कभी-कभी दो मध्यम पदों में से एक में अकल्पनीय दीवारें हैं:

उदाहरण देता है

मेरा प्रश्न: मैं यह कैसे सुनिश्चित कर सकता हूं कि मानचित्र को हमेशा यादृच्छिक रूप से अभी तक हमेशा हल किया जा सकता है और यह कि नीचे की मंजिल के बाईं ओर से शुरू होने वाला नायक, हमेशा इसे ऊपरी मंजिल पर किसी भी ऊपर की ओर इंगित लिफ्ट के माध्यम से छोड़ सकता है?

विकास के लिए मैं लूआ भाषा का उपयोग कर रहा हूं, इसके लायक है। बहुत बहुत धन्यवाद!

जवाबों:


14

आप जो करना चाहते हैं, वह एक ऐसा ग्राफ़ बनाएं, जिसमें प्रत्येक नोड एक लिफ्ट स्थिति हो, और उनके बीच के किनारों का मतलब है कि आप वहां चल सकते हैं / उठा सकते हैं। एक बार जब आप ग्राफ बना लेते हैं तो आप dfs / bfs का उपयोग करके देख सकते हैं कि क्या आप प्रारंभ नोड से अंत नोड तक प्राप्त कर सकते हैं।

ऊपर के उदाहरण का उपयोग करके मैंने चित्र बनाया कि ग्राफ़ कैसा दिखेगा। ग्रीन सर्कल का मतलब है कि वहां एक लिफ्ट है, और ग्रीन लाइनों का मतलब है कि आप नोड से नोड की यात्रा कर सकते हैं।

नोड्स


धन्यवाद, यह बहुत उपयोगी है! मुझे अपने प्रश्न में इस बात पर अधिक जोर देना चाहिए था कि मानचित्र को भी पहले स्थान पर लाने की आवश्यकता है। अब मैं विचार कर रहा हूं कि क्या यह आसान नहीं हो सकता है - इसके बजाय पूरी तरह से यादृच्छिक लिफ्ट / दीवार संयोजनों को उत्पन्न करने और उनकी विलेयता की जांच करने के बजाय - घर के माध्यम से एल्गोरिथ्म कदम के लिए, नायक की तरह होगा, और इस तरह से यादृच्छिक लिफ्टों और दरवाजों को उत्पन्न करना (यादृच्छिक लिफ्ट दूरी और बाएं-दाएं मोड़, साथ ही साथ दीवारों को जोड़ना, उदाहरण के लिए)। के रूप में "सही चलना या तो 0, 4 या 8 बदल जाता है; एक ऊपर की ओर लिफ्ट बनाएं, 1 से 4 मंजिल तक जाएं ..."
फिलिप लेन्ससेन

@PhilippLenssen यह अनिवार्य रूप से "यादृच्छिक गहराई-पहली खोज" है जो एक ग्राफ पर पीढ़ी को भूलभुलैया करने के लिए है।
केविन रीड

5

आपके पास और एक सामान्य भूलभुलैया के बीच का अंतर केवल इतना है कि इसमें गैर-आसन्न कनेक्शन लंबवत हैं। मुझे लगता है कि आपको जो देखना चाहिए वह ग्राफ-आधारित भूलभुलैया पीढ़ी के एल्गोरिदम हैं । आपको बस एक साधारण 2 डी भूलभुलैया की तुलना में "आसन्न कमरे" या "संभव दीवारों" का एक बड़ा सेट होना चाहिए, जिसमें फर्श-ग्रिड-कोशिकाओं की हर खड़ी संरेखित जोड़ी होती है जिसमें पहले से ही एक हस्तक्षेप करने वाली लिफ्ट नहीं होती है। आप इसे एक ग्राफ के रूप में मॉडल कर सकते हैं जहां निश्चित लिफ्ट किनारों को जोड़ना संयोग से अन्य संभावित लिफ्ट किनारों को हटा देता है; कुछ एल्गोरिदम इससे भ्रमित हो सकते हैं, लेकिन अन्य नहीं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.