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

यह पता लगाने का कार्यक्रम है कि पायथन में दिए गए बिंदुओं के माध्यम से वर्तमान स्थिति से एक बिंदु तक पहुंचा जा सकता है

मान लीजिए कि 2D स्पेस में एक पॉइंटर एक बिंदु p पर स्थित होता है जिसमें निर्देशांक (px, py) होते हैं। अब पॉइंटर को निर्देशांक (qx, qy) वाले दूसरे बिंदु q पर जाना होगा। सूचक केवल स्वतंत्र रूप से नहीं चल सकता है, यदि बीच में कुछ बिंदु स्थित हैं तो यह q की यात्रा कर सकता है। हमें "पथ" बिंदुओं की एक सरणी दी गई है जिसमें विभिन्न समन्वय बिंदु होते हैं। पॉइंटर एक बिंदु पर जा सकता है यदि वह पॉइंटर की वर्तमान स्थिति से (x+1, y) या (x, y+1) या (x-1, y) या (x, y-1) पर स्थित है। . सरणी 'पथ' में दिए गए बिंदुओं को क्रम से संसाधित किया जाना है, जिसका अर्थ है कि सरणी में प्रत्येक बिंदु को कुल पथ में जोड़ा जाना है, भले ही चाल नहीं बनाई जा सके। इसलिए, आरंभिक और गंतव्य बिंदुओं को देखते हुए, हमें यह पता लगाना होगा कि क्या सूचक दिए गए बिंदुओं से गंतव्य तक पहुंच सकता है। यदि ऐसा हो सकता है, तो हम गंतव्य तक पहुंचने के लिए उसके द्वारा पार किए गए कुल अंकों का प्रिंट आउट लेते हैं; और अगर हम -1 प्रिंट नहीं कर सकते हैं।

इसलिए, यदि इनपुट px =1, py =1, qx =2, qy =3, पथ =[[1, 2], [0, 1], [0, 2], [1, 3] जैसा है, [3, 3]], तो आउटपुट 4 होगा।

इसलिए, यदि हम अंकों को क्रमानुसार संसाधित करते हैं, तो हमें -

. मिलता है

बिंदु (1, 2):मूव किया जाता है, वर्तमान पॉइंटर स्थिति (1, 2)। पार किए गए बिंदु:1.

बिंदु (0, 1):कोई चाल नहीं चलती, वर्तमान सूचक स्थिति (1, 2)। ट्रैवर्स किए गए पॉइंट:2.

बिंदु (0, 2):कोई चाल नहीं चलती, वर्तमान सूचक स्थिति (1, 2)। ट्रैवर्स किए गए पॉइंट:3.

बिंदु (1, 3):मूव किया जाता है, वर्तमान पॉइंटर स्थिति (1, 3)। ट्रैवर्स किए गए पॉइंट:4.

गंतव्य वर्तमान सूचक स्थिति से (x+1, y) स्थान पर स्थित है, इसलिए ट्रैवर्स किए गए बिंदुओं की कुल संख्या 4 है।

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

  • एक फंक्शन हेल्पर () को परिभाषित करें। इसमें k
      . लगेगा
    • कोने:=एक नया सेट जिसमें जोड़े (px, py) और (qx, qy) शामिल हैं
    • प्रत्येक x के लिए, y स्थिति k तक के पथ में, करें
      • जोड़े (x, y) को शीर्षों में जोड़ें
    • trav:=एक नया डेक जिसमें युग्म (px, py) शामिल है
    • जबकि ट्रैव खाली नहीं है, करें
      • जोड़ी (x, y) :=ट्रैव से सबसे बाईं ओर का आइटम पॉप करें
      • यदि (x, y) (qx, qy) के समान है, तो
        • सही लौटें
      • प्रत्येक kx के लिए, ky in ((x - 1, y),(x + 1, y), (x, y – 1), (x, y + 1)), do
        • यदि युग्म (kx, ky) शीर्षों में मौजूद है, तो
          • यात्रा के अंत में जोड़ी (kx, ky) डालें
          • शीर्षों से जोड़ी (kx, ky) हटाएं
      • झूठी वापसी
  • ll :=-1
  • ul :=पथों का आकार + 1
  • जबकि ll + 1
  • k :=ll + ((ul - ll) / 2) का न्यूनतम मान
  • यदि सहायक (के) सत्य है, तो
    • उल:=के
  • अन्यथा,
    • ll :=k
  • उल लौटें अगर उल <=पथ का आकार, अन्यथा वापसी -1
  • उदाहरण

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

    from collections import deque
    def solve(px, py, qx, qy, paths):
       def helper(k):
          vertices = {(px, py), (qx, qy)}
          for x, y in paths[:k]:
             vertices.add((x, y))
          trav = deque([(px, py)])
          while trav:
             x, y = trav.popleft()
             if (x, y) == (qx, qy):
                return True
             for kx, ky in ((x - 1, y), (x + 1, y), (x, y - 1), (x, y + 1)):
                if (kx, ky) in vertices:
                   trav.append((kx, ky))
                   vertices.remove((kx, ky))
          return False
       ll, ul = -1, len(paths) + 1
       while ll + 1 < ul:
          k = ll + (ul - ll) // 2
          if helper(k):
             ul = k
          else:
             ll = k
       return ul if ul <= len(paths) else -1
    
    print(solve(1, 1, 2, 3, [[1, 2],[0, 1],[0, 2],[1, 3],[3, 3]]))

    इनपुट

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

    आउटपुट

    4

    1. पायथन में n उलटने के बाद गेंद की स्थिति का पता लगाने का कार्यक्रम

      मान लीजिए, गेंदों की संख्या n है। गेंदों को 1,2,3,4,...,n फैशन में क्रमबद्ध किया जाता है। अब गेंदों को क्रम में उलट दिया जाता है, या एक तरह से n, n-1, n-2, ......, 2, 1 क्रम में रखा जाता है। गेंदों को फिर से क्रम में उलट दिया जाता है, इस बार उन्हें स्थिति 1 से उलट दिया जाता है। से n, या अब क्रम n, 1

    1. पायथन में उप-पेड़ों के नोड मानों के योग से न्यूनतम मान ज्ञात करने का कार्यक्रम

      मान लीजिए, हमारे पास एक पेड़ है जिसके सभी नोड्स 1 से n तक गिने गए हैं। प्रत्येक नोड में एक पूर्णांक मान होता है। अब यदि हम पेड़ से एक किनारा हटाते हैं, तो दो उप-वृक्षों के नोड मानों के योग में अंतर न्यूनतम होना चाहिए। हमें ऐसे उप-वृक्षों के बीच न्यूनतम अंतर का पता लगाना और वापस करना होगा। पेड़ हमें

    1. यह पता लगाने के लिए कार्यक्रम कि क्या पायथन में सभी के द्वारा ग्राफ़ को ट्रैवर्स किया जा सकता है

      मान लीजिए, हमें एक ग्राफ दिया गया है जिसमें n शीर्षों की संख्या 0 से n - 1 है। ग्राफ अप्रत्यक्ष है और प्रत्येक किनारे का वजन है। ग्राफ में तीन प्रकार के भार हो सकते हैं और प्रत्येक भार एक विशेष कार्य को दर्शाता है। दो लोग हैं जो ग्राफ को पार कर सकते हैं, अर्थात् जैक और केसी। जैक ग्राफ को पार कर सकता