2012-09-13 3 views
13

मेरे पास एक शुरुआत, खत्म, और कुछ दीवारों के साथ एक ग्रिड है। इकाइयों के माध्यम से गुजरने के बिना, इकाइयों को सबसे कम पथ (केवल ऊपर/नीचे/बाएं/दाएं स्थानांतरित करना) प्रारंभ से लेकर खत्म तक ले जाएं।एक ग्रिड पर वर्गों का पता लगाने के लिए जो ब्लॉक जोड़ने के बाद कभी भी सबसे कम पथ का हिस्सा नहीं हो सकता है?

shortest path

उपयोगकर्ता के रूप में कई अतिरिक्त दीवारों को जोड़ने के लिए के रूप में वे पथ को बदलना चाहते हैं की अनुमति है।

adding walls

हालांकि, ध्यान दें कि कोई फर्क नहीं पड़ता कि कितने दीवारों जोड़ रहे हैं या जहां वे जोड़ दिया जाता है, वहाँ कुछ वर्गों कि कम से कम पथ का हिस्सा बनने के लिए कभी नहीं कर सकते हैं कर रहे हैं!

These squares can never be part of the shortest path!
इन वर्गों कभी नहीं कम से कम पथ का हिस्सा हो सकता है!

मैं यह पता लगाने का एक तरीका ढूंढ रहा हूं कि कौन से वर्ग कभी भी सबसे कम पथ का हिस्सा नहीं बन सकते हैं।


उपरोक्त मामलों को खोजने में काफी आसान है; लेकिन अधिक जटिल मामले हैं। पर विचार करें:

None of the squares with red-dots can ever be part of the best-path

ऊपर छवि में, लाल डॉट्स के साथ वर्गों में से कोई भी कभी भी, सबसे अच्छा मार्ग का हिस्सा हो सकता है कि केवल एक ही क्षेत्र के लिए प्रवेश द्वार है वहाँ, और यह केवल दो रिक्त स्थान विस्तृत है, क्योंकि। यदि यह तीन रिक्त स्थान चौड़े थे, या यदि दीवारों में से किसी एक को हटा दिया गया था, तो उनमें से अधिकतर वर्ग शायद सबसे अच्छे मार्ग का हिस्सा हो सकते हैं।

मैं उपर्युक्त मामलों (ज्यादातर मिन-कट और बाढ़ भरने का उपयोग करके) का पता लगाने का एक तरीका जानने का प्रयास कर रहा हूं, लेकिन सफलता के बिना। क्या किसी को इस समस्या को हल करने के तरीके के बारे में पता है?

+1

आपके उदाहरणों में साझा होने वाली एक आम विशेषता आकार 1 या 2 के [क्लिक सेपरेटर] (http://en.wikipedia.org/wiki/Vertex_separator) है। क्या आप एक उदाहरण के बारे में सोच सकते हैं जहां यह नहीं है मामला ? – krjampani

+1

@jkraju, मैंने एक उदाहरण के बारे में नहीं सोचा है जहां मृत कोशिकाएं (यानी कोशिकाएं जो किसी भी सबसे कम पथ का हिस्सा नहीं हो सकती हैं) में आकार 1 या 2 के विभाजक नहीं होते हैं; लेकिन यह * मृत कोशिकाओं के लिए आकार 2 के विभाजक के साथ उदाहरणों के बारे में सोचना आसान है। –

+0

@ jwpat7 मैं केवल अलग-अलग विचारकों पर विचार कर रहा था जो एक ही घटक में एस और एफ रखते हैं। शायद आप 2-क्लिक सेपरेटर्स के बारे में सोच रहे थे जो एफ से अलग हैं? मैं मानता हूं कि ऐसा उदाहरण बनाना आसान है। – krjampani

उत्तर

4

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

एन को ग्रिड में वर्गों की संख्या होने दें। वर्गों की किसी विशेष जोड़ी के लिए (उनमें से ओ (एन) हैं), जो डिस्कनेक्ट हो जाता है, उसे बाढ़ के साथ ओ (एन) समय में गणना की जा सकती है, इसलिए यह ओ (एन^2) है। जो कि मिनी-कट से सस्ता है, जिसका आपने उल्लेख किया है, इसलिए मुझे लगता है कि यह आपके लिए काफी सस्ता है।

+1

डांग, मैं इस समाधान के बहुत करीब था * (@ टॉप्रो का जवाब देखें) *! मुझे दोनों उत्तरों पसंद हैं, लेकिन मैंने इस बात को दृढ़ प्रमाण के कारण चुना है कि विचार करने के लिए कोई अन्य मामला नहीं है। आप दोनों का धन्यवाद - मैंने अब इसे कार्यान्वित किया है, और यह बहुत अच्छा काम करता है! –

+0

इसे समझाने का अच्छा तरीका। मेरा जवाब मूल रूप से एक ही तकनीक है लेकिन ओ (एन) में ऐसा करने का प्रयास करता है - हालांकि कार्यान्वयन बहुत कठिन होगा। –

1

पहले हम देखते हैं कि, क्षेत्रों एक या दो आसन्न ग्रिड द्वारा अवरुद्ध किया जा सकता किसी भी कम से कम पथ में कभी नहीं होगा।

अपने उदाहरण में मामला देखें, यह उन दो पीले ग्रिड हैं जो डॉट्स को अवरुद्ध करते हैं।

enter image description here

एक ग्रिड द्वारा अवरुद्ध समझने में आसान है। जब दो द्वारा अवरुद्ध:

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

तो यहाँ है एल्गोरिथ्म आता है:

की गणना प्रत्येक खाली ग्रिड

  1. उस पर एक दीवार डाल दिया और का उपयोग बाढ़ भरण अवरुद्ध क्षेत्रों को खोजने के लिए, वे किसी काम का नहीं है।
  2. अपने चार आसन्न ग्रिड (यदि खाली हो) में से एक पर दीवार डालने का प्रयास करें, तो अवरुद्ध क्षेत्रों को खोजने के लिए बाढ़ भरने का उपयोग करें, उनका कोई उपयोग नहीं है।
+0

हम्म, मुझे लगता है कि आप इस के साथ सही हैं * (चेतावनी के साथ कि हमें अलग-अलग वर्गों को बाढ़ करने की आवश्यकता है, उन वर्गों को खोजने के लिए जो पहुंचने योग्य नहीं हैं। इसके अलावा, आपको केवल दो पड़ोसियों की जांच करने की आवश्यकता है, चार नहीं) *। मैं खुद को इस पूरे समय भ्रमित कर रहा था क्योंकि आपकी छवि में पीले वर्ग सबसे अच्छे रास्ते का हिस्सा हो सकते हैं, लेकिन मुझे अभी एहसास हुआ कि बाढ़ भरने के बाद, हम उन दो वर्गों पर विचार नहीं करते जिन्हें हमने दीवारों को उस पहुंचने योग्य के हिस्से में रखा था क्षेत्र। Do'h! –

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

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