यह एक नहीं बल्कि आसान एल्गोरिथ्म लागू करने के लिए किया जाना चाहिए (प्रत्येक नोड के लिए एक get_neighbors
समारोह मान लिया गया है)।
आरंभ करने के लिए, सड़कों को अलग-अलग सेटों में अलग करें, जहां प्रत्येक सेट में सभी सड़क खंड किसी भी तरह से जुड़े हुए हैं। ऐसा करने पर विभिन्न तरीकों है, लेकिन यहां से एक है:
- , एक यादृच्छिक सड़क खंड उठाओ एक सेट में जोड़ने, और इस अनुभाग से
- शाखा बाहर चिह्नित, यानी। दोनों दिशाओं में जुड़े सेगमेंट का पालन करें जो चिह्नित नहीं हैं (यदि वे चिह्नित हैं, हम पहले से ही यहां हैं)
- यदि पाया गया कि सड़क सेगमेंट पहले से सेट में नहीं है, तो इसे जोड़ें और इसे
- पर जाएं नए खंडों से जब तक आप वर्तमान में
- में उन लोगों से जुड़े किसी भी अनमार्क किए गए सेगमेंट नहीं ढूंढ पा रहे हैं, यदि अनमार्क किए गए सेगमेंट शेष हैं, तो वे एक नए सेट का हिस्सा हैं, एक यादृच्छिक चुनें और 1 सेट पर एक और सेट के साथ शुरू करें
नोट: सरकारी Catan Rules के अनुसार, एक सड़क अगर Ano तोड़ा जा सकता है थर्म प्ले दो खंडों के बीच संयुक्त पर एक समझौता बनाता है। आपको निपटारे के पीछे शाखा का पता लगाने की जरूरत नहीं है।
नोट, उपरोक्त में, और निम्न चरणों में, केवल वर्तमान खिलाड़ियों के खंडों पर विचार करें। आप उन अन्य खंडों को अनदेखा कर सकते हैं जैसे कि वे मानचित्र पर भी नहीं थे।
यह आपको एक या एक से अधिक सेट देता है, जिनमें प्रत्येक एक या अधिक सड़क खंड होते हैं।
ठीक है, प्रत्येक सेट के लिए, निम्न कार्य करें:
- सेट केवल एक ही जुड़ा सड़क खंड इसे से बाहर (यानी है कि में एक यादृच्छिक सड़क खंड उठाओ।आप एक अंतिम बिंदु)
- आप ऐसा नहीं कर सकते हैं, तो पूरे सेट पाशन है (एक या अधिक) लेने, तो खंड आपके द्वारा चुने गए से अब इस मामले
में एक यादृच्छिक खंड लेने,, वर्तमान सड़क की लंबाई का ट्रैक रखते हुए, अब तक गहराई से पहली खोज में एक रिकर्सिव ब्रांचिंग करें। हमेशा सड़क सेगमेंट को चिह्नित करें, और पहले से चिह्नित सेगमेंट में शाखा न करें। यह एल्गोरिदम को रोकने की अनुमति देगा जब यह "अपनी पूंछ खाएगा"।
जब भी आपको बैकट्रैक की आवश्यकता होती है, क्योंकि वहां कोई और शाखा नहीं है, तो वर्तमान लंबाई का एक नोट लें, और यदि यह "पिछले अधिकतम" से अधिक लंबा है, तो नई लंबाई को अधिकतम के रूप में स्टोर करें।
सभी सेट के लिए यह करें, और आपको अपनी सबसे लंबी सड़क होनी चाहिए।
मुझे आशा है कि आप कुछ भी वास्तव में कुशल के लिए नहीं देख रहे हैं, सबसे लंबे समय तक पथ एन पी-सम्पूर्ण माना जाता है! –
मैं इस पर कुछ जांच कर रहा हूं, लेकिन मैं एडजेंसी मैट्रिस में देखता हूं। मैंने यह कहकर एक उत्तर पोस्ट किया होगा, लेकिन मैं सबसे लंबे समय तक गैर-चक्रीय पथ के लिए एल्गोरिदम का शिकार करने में सक्षम नहीं हूं। साथ ही, Settlers मानचित्र में सड़कों की संख्या के साथ, यह कुछ जटिल हो सकता है, खासकर यदि आपके पास एकाधिक खिलाड़ियों के लिए अलग-अलग मानचित्र आकार हैं। –
@ जेन: जब मुझे पता चला कि सबसे लंबा रास्ता एनपी-पूर्ण है, तो मुझे निराश था, लेकिन मुझे लगा कि समस्या की विशिष्टता कुछ अनुकूलन उत्पन्न करेगी जो बहुपद या बेहतर समय में हल करने की अनुमति देगी। – Jay