Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

Python में बड़े भूलभुलैया से बच निकलें


मान लीजिए हमारे पास एक ग्रिड है, जिसमें 1 मिलियन पंक्तियाँ और 1 मिलियन कॉलम हैं, हमारे पास अवरुद्ध कोशिकाओं की एक सूची भी है। अब हम स्रोत वर्ग से शुरू करेंगे और लक्ष्य वर्ग तक पहुंचना चाहेंगे। प्रत्येक चाल में, हम ग्रिड में ऊपर, नीचे, बाएं, दाएं आसन्न वर्ग पर चल सकते हैं जो अवरुद्ध कोशिकाओं की दी गई सूची में नहीं है।

हमें जांचना है कि क्या चालों के अनुक्रम के माध्यम से लक्ष्य वर्ग तक पहुंचना संभव है या नहीं।

इसलिए, यदि इनपुट इस तरह है blocked = [[0,1],[1,0]], source = [0,0], target = [0,3], तो आउटपुट False होगा।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे −

  • blocked := सभी अवरुद्ध कोशिकाओं का एक सेट बनाएं

  • एक विधि dfs() परिभाषित करें, यह x, y, target और seen लेगा

  • यदि (x,y) ग्रिड की सीमा में नहीं हैं या (x,y) blocked में है या (x,y) seen में है तो

    • false लौटाएं

  • (x,y) को seen में जोड़ें

  • यदि seen का आकार > 20000 या (x,y) target है, तो

    • true लौटाएं

  • dfs(x+1,y,target,seen) या dfs(x-1,y,target,seen) या dfs(x,y+1,target,seen) या dfs(x,y-1,target,seen) लौटाएं

  • dfs(source[0], source[1], target, खाली सेट) और dfs(target[0], target[1], source, खाली सेट) लौटाएं

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें −

उदाहरण

class Solution(object): def isEscapePossible(self, blocked, source, target): blocked = set(map(tuple, blocked)) def dfs(x, y, target, seen): if not (0 <= x < 10**6 and 0 <= y < 10**6) or (x, y) in blocked or (x, y) in seen: return False seen.add((x, y)) if len(seen) > 20000 or [x, y] == target: return True return dfs(x + 1, y, target, seen) or \ dfs(x - 1, y, target, seen) or \ dfs(x, y + 1, target, seen) or \ dfs(x, y - 1, target, seen) return dfs(source[0], source[1], target, set()) and dfs(target[0], target[1], source, set()) ob = Solution() print(ob.isEscapePossible([[0,1],[1,0]], [0,0], [0,3]))

इनपुट

[[0,1],[1,0]], [0,0], [0,3]

आउटपुट

False

  1. टारगेट को धारण करने वाले सबसे छोटे चक्र की लंबाई ज्ञात करने का पायथन प्रोग्राम टारगेट को धारण करने वाले सबसे छोटे चक्र की लंबाई ज्ञात करने का पायथन प्रोग्राम

    मान लीजिए हमारे पास एक निर्देशित ग्राफ की आसन्न सूची है, जहां इंडेक्स i पर प्रत्येक सूची नोड i से जुड़े नोड्स को दर्शाती है। हमारे पास एक टारगेट मान भी है। हमें उस सबसे छोटे चक्र की लंबाई ढूंढनी है जिसमें टारगेट शामिल है। यदि कोई समाधान नहीं है तो -1 लौटाएं। उदाहरण के लिए, यदि इनपुट इस तरह है: tar

  1. - पायथन में बहुत बड़ी संख्याओं को कैसे संभालें

    समस्या विवरण आप पायथन में स्पीड की चिंता किए बिना सीधे बड़ी संख्याओं पर अंकगणित ऑपरेशन कर सकते हैं। पायथन एक बिगनम पूर्णांक प्रकार का समर्थन करता है जो मनमाने ढंग से बड़ी संख्याओं के साथ काम कर सकता है। पायथन 2.5+ में, इस प्रकार को long कहा जाता है और यह int प्रकार से अलग है, लेकिन इंटरप्रेटर स्वचाल

  1. - पायथन में स्ट्रिंग में एस्केप सीक्वेंस कैसे प्रोसेस करें?

    पायथन में बैकस्लैश से एस्केप्ड स्ट्रिंग्स को अनएस्केप करने के दो तरीके हैं। पहला है literal_eval का उपयोग करके स्ट्रिंग का मूल्यांकन करना। ध्यान दें कि इस विधि में आपको स्ट्रिंग को कोट्स की एक और परत से घेरने की आवश्यकता होती है। उदाहरण के लिए: >>> import ast >>> a = Hello,\\nworld