एक ग्रिड में नोड्स के अनुक्रम का पता लगाना


12

नीचे दी गई छवि को देखते हुए, मुझे बोर्ड (ग्रीन लाइन) पर सबसे इष्टतम अनुक्रम का पता लगाने की आवश्यकता है। नीली / लाल रेखाएं संभव का प्रतिनिधित्व करती हैं, लेकिन सर्वश्रेष्ठ चाल नहीं।

ये नियम हैं:

  1. आप किसी भी टाइल पर जा सकते हैं जो समान है, और आपका पड़ोसी है (विकर्ण वैध है)
  2. एक बार जब आप एक टाइल का दौरा कर चुके हैं, तो आप इसे फिर से नहीं देख सकते हैं।

मैंने प्रत्येक नोड के माध्यम से लूपिंग के बारे में सोचा है, और उसके पड़ोसियों को देख रहा हूं, फिर पुनरावृत्ति कर रहा हूं। एक बार जब मुझे एक संभावित कदम मिल जाता है तो मैं इसे एक संरचना में डाल सकता हूं। एक बार सभी संभावित चालें मिल जाने के बाद मैं सिर्फ नोड की उच्चतम गिनती के साथ इस कदम को उठाता हूं। यह तब और मुश्किल हो जाता है जब एक नोड में एक से अधिक पड़ोसी होते हैं जो मेल खाते हैं।

तो, क्या कुछ एल्गोरिथ्म है जो मैं उपयोग कर सकता हूं? मैं सोच रहा था कि बाढ़ के कुछ प्रकार हैं, लेकिन यह नियम # 2 को पूरा नहीं करता है।

जैसा कि अनुरोध किया गया है, यहां समान गेमप्ले का वीडियो है। http://youtube.com/watch?v=eumnCTG0AE8

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


यह नोट करना महत्वपूर्ण हो सकता है कि 3 तलवारें / सोना संभव मैच हैं, लेकिन मैंने उन्हें छवि में शामिल नहीं किया।

3 तलवारें / स्वर्ण संभावित मैच क्यों हैं? क्या आप उन सभी रास्तों को ढूंढना चाहते हैं जिनमें कम से कम 3 आइटम हों?
बुमज़ैक

हाँ, यह विचार है।

जवाबों:


6

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

आप देखेंगे कि पिछले पैराग्राफ में मैंने प्रत्येक ग्राफ के लिए कई बार डीएफएस लागू करने का उल्लेख किया था। एक ग्राफ पर चलाया गया एक डीएफएस पर्याप्त नहीं होगा। इस विशेष मामले पर विचार करें:

    1
1 1 1
    1
    1
    1
    1

यदि संयोग से आप सबसे पहले इस ग्राफ पर डीएफएस को सबसे ऊपरी नोड में चलाएंगे, तो आप लंबवत रेखा के रूप में सबसे लंबे संभव मार्ग की खोज करेंगे, लेकिन यह सही नहीं होगा। ऐसा हर बार होता है जब आप DFS एल्गोरिदम को एक नोड में शुरू करते हैं जो परिणामस्वरूप पथ के अंदर होता है या इसका हिस्सा नहीं होता है। इस विशेष उदाहरण में आपको जो करने की आवश्यकता है, वह दूसरी पंक्ति में बाईं ओर के नोड से एक डीएफएस एल्गोरिथ्म भी शुरू करें। यही सही रास्ता ढूंढेगा। सामान्यतया, आपको प्रत्येक नोड में DFS एल्गोरिदम को चलाने की आवश्यकता होगी जो वर्तमान में उस ग्राफ़ के लिए सबसे लंबे पथ का हिस्सा नहीं है, जैसा कि ऊपर कहा गया है।

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

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

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

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