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

एक बड़े भूलभुलैया अजगर से बचें

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

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

इसलिए, यदि इनपुट अवरुद्ध =[[0,1], [1,0]], स्रोत =[0,0], लक्ष्य =[0,3] जैसा है, तो आउटपुट गलत होगा

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

  • अवरोधित :=सभी अवरोधित कक्षों का एक सेट बनाएं

  • एक विधि dfs() को परिभाषित करें, इसमें x, y, लक्ष्य और देखा जाएगा

  • अगर (x,y) ग्रिड की रेंज में नहीं हैं या (x,y) ब्लॉक में हैं या (x,y) दिखाई दे रहे हैं तो

    • झूठी वापसी


  • (x, y) को सीन में जोड़ें

  • अगर देखा का आकार> 20000 या (x, y) लक्ष्य है, तो

    • सही लौटें

  • रिटर्न dfs(x+1,y,target,seen) या dfs(x-1,y,target,seen) या dfs(x,y+1,target,seen) या dfs(x,y-1,target, देखा)

  • वापसी dfs (स्रोत [0], स्रोत [1], लक्ष्य, खाली सेट) और dfs (लक्ष्य [0], लक्ष्य [1], स्रोत, खाली सेट)

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

उदाहरण

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. तो, अगर इनपुट पसंद है 0 है, लेक

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

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

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

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