एक ग्राफ के किनारों की संख्या कम करें, इसे जुड़ा हुआ रखें


10

मैं बेतरतीब ढंग से उत्पन्न काल कोठरी के साथ एक खेल डिजाइन कर रहा हूँ। मैं इसे एक जुड़े हुए, अप्रत्यक्ष ग्राफ के रूप में देखना चाहता हूं जिसमें नोड्स कमरे और किनारे दरवाजे या गलियारे हैं। फिर मैं कालकोठरी प्रवेश द्वार के रूप में एक "साइड" नोड चुनता हूं, मैं इस प्रवेश द्वार और अन्य सभी नोड्स के बीच की दूरी की गणना करता हूं, और तय करता हूं कि सबसे दूर के नोड्स में से एक है "गोल" कालकोठरी (खजाने का स्थान, बॉस) राजकुमारी, आदि)।

मैंने अंतिम कालकोठरी स्थलाकृति उत्पन्न करने के 2 तरीके देखे:

  • पहले एक यादृच्छिक ग्राफ उत्पन्न करें, फिर 2d दुनिया को यादृच्छिक स्थानों पर कमरों के साथ भरने की कोशिश करें, किनारे के कनेक्शन का सम्मान करें। मुझे लगा कि यह कभी-कभी मुश्किल होगा क्योंकि कमरे की पीढ़ी असंभव स्थानों में कमरे में फिट होने की कोशिश में "लॉक" हो सकती है।
  • पहले कमरे उत्पन्न करें, उन्हें बेतरतीब ढंग से रखते हुए जहां वे फिट होते हैं, फिर परिणाम को नोड्स और किनारों पर मैप करें। मैंने यह कोशिश करने का फैसला किया।

मेरे विचार में शामिल हैं:

  • पहले एक बड़ा कमरा तैयार करें जिसमें पूरा कालकोठरी हो।
  • बड़े कमरे के अंदर एक दीवार रखो, एक यादृच्छिक स्थान पर, बड़े कमरे को अलग-अलग क्षेत्र के 2 छोटे कमरों में विभाजित करें।
  • तब मैं प्रत्येक कमरे को 2 में विभाजित करना जारी रखता हूं, जब तक कि वे बहुत छोटे न हों, या कमरे की कुल संख्या अधिकतम (या किसी अन्य स्थिति) तक पहुंच जाए। प्रत्येक नया कमरा एक नोड है।
  • एक बार समाप्त होने के बाद, मैं प्रत्येक कमरे की जांच करता हूं और सभी आसन्न अन्य कमरों को ढूंढता हूं, एक किनारे से जुड़े हुए 2 नोड्स को चिह्नित करता है।

इस तरह मैं यह सुनिश्चित करता हूं कि सभी कमरों में 2 डी दुनिया में एक संभावित स्थान है, और एक जुड़े ग्राफ द्वारा सही ढंग से मैप किया गया है।

मेरी समस्या यह है कि कमरों को जोड़ने वाले बहुत सारे दरवाजे और गलियारे हैं।

इसलिए मुझे एक एल्गोरिथ्म पसंद है जो एक जुड़े हुए अप्रत्यक्ष ग्राफ के किनारों की संख्या को कम कर देता है , लेकिन इसे अंत में जुड़े (सभी नोड्स रहने योग्य) रहते हैं।


आपका विचार मूल रूप से एक द्विआधारी खोज पेड़ है, यदि आप जानना चाहते हैं। मै उसका इस्तेमाल किया; यह बजाय अच्छा काल कोठरी बनाता है और आसान है। :)
कम्युनिस्ट डक

2
FYI करें: एक पूर्ण ग्राफ़ में सभी जोड़ियों के बीच में किनारे होते हैं, इसलिए (डुप्लिकेट किनारों की अनुमति नहीं है) आप किसी भी किनारों को नहीं निकाल सकते हैं और अभी भी एक पूर्ण ग्राफ़ है। राइट टर्म एक कनेक्टेड ग्राफ है
माइकल मैडसेन

बाइनरी सर्च ट्री, कनेक्टेड ग्राफ, राइट। मैं पारंपरिक चीजों के साथ बहुत बुरा हूं।
स्पेल

जवाबों:


13

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


1
ओह ठीक है, न्यूनतम फैले पेड़, बिल्कुल! अच्छा विचार है, धन्यवाद।
स्प्लिट

1

आप क्रुस्कल के एल्गोरिथ्म को भी आज़मा सकते हैं


0

इंकवेल विचार से इस सूची के कुछ कालकोठरी जनरेटर खुले स्रोत हैं या उनके एल्गोरिदम पर प्रलेखन प्रदान करते हैं। Google आपको [[programminglanguagename] कालकोठरी जनरेटर 'की खोज से भी बहुत कुछ देगा। दुर्भाग्य से मेरा पसंदीदा उन तरीकों में से किसी के द्वारा भी खोजने योग्य नहीं है, सबसे अच्छी तरह से प्रलेखित होने के बावजूद जो मैंने कभी भी सामना किया, और मैं इसका नाम याद नहीं रख सकता क्योंकि मैंने इसे हाल ही में एक हार्ड ड्राइव क्रैश में खो दिया था। उस ड्राइव पर रिकवरी करने के बाद मैं इस उत्तर को अपडेट करूंगा।

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