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

Python में घर पहुंचने के लिए न्यूनतम जंप खोजने का प्रोग्राम


मान लीजिए एक ऐरे forbidden है, जहां forbidden[i] दर्शाता है कि बग forbidden[i] पोजीशन पर जंप नहीं कर सकता, और हमारे पास तीन मान a, b, और x भी हैं। एक बग का घर संख्या रेखा पर पोजीशन x पर है। यह शुरू में पोजीशन 0 पर है। यह निम्नलिखित नियमों से जंप कर सकता है:

  • बग ठीक a पोजीशन दाएं जंप कर सकता है।
  • बग ठीक b पोजीशन बाएं जंप कर सकता है।
  • बग लगातार दो बार पीछे की ओर जंप नहीं कर सकता।
  • बग ऐरे में दिए गए किसी भी फॉरबिडन पोजीशन पर जंप नहीं कर सकता।
  • बग अपने घर से आगे जंप कर सकता है, लेकिन यह नेगेटिव मान वाली पोजीशन पर जंप नहीं कर सकता।

हमें बग के गंतव्य तक पहुंचने के लिए आवश्यक न्यूनतम जंप की संख्या ढूंढनी है। यदि ऐसा कोई संभावित अनुक्रम नहीं है, तो -1 वापस करें।

उदाहरण के लिए, यदि इनपुट है forbidden = [2,3,7,9,12], a = 4, b = 2, x = 16, तो आउटपुट 7 होगा क्योंकि, 0 से शुरू करके, a = 4 आगे दो बार जंप करके 4 और 8 पर पहुंचें, लेकिन 12 पर जंप नहीं कर सकते क्योंकि यह फॉरबिडन है, फिर b = 2 पीछे 6 पर जाएं, फिर 10, 14, 18 पर जंप करें और फिर दो बार पीछे जाकर 16 पर पहुंचें, तो कुल 7 चरण हैं।

समाधान के चरण

  1. queue := [(x, 0, True)] के साथ एक क्यू, forbidden := set(forbidden)
  2. lim := max(max(forbidden), x) + a + b
  3. while queue:
    • (curr, jumps, is_b) := queue.pop(0)
    • यदि curr in forbidden या not (0 <= curr <= lim):
      • अगले इटरेशन पर जाएं
    • forbidden.add(curr)
    • यदि curr == 0:
      • jumps वापस करें
    • यदि is_b:
      • queue.append((curr+b, jumps+1, False))
    • queue.append((curr-a, jumps+1, True))
  4. -1 वापस करें

उदाहरण

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

def solve(forbidden, a, b, x):
    queue, forbidden = [(x, 0, True)], set(forbidden)
    lim = max(max(forbidden), x) + a + b
    while queue:
        curr, jumps, is_b = queue.pop(0)
        if curr in forbidden or not 0 <= curr <= lim:
            continue
        forbidden.add(curr)
        if curr == 0:
            return jumps
        if is_b:
            queue.append((curr+b, jumps+1, False))
        queue.append((curr-a, jumps+1, True))
    return -1

forbidden = [2,3,7,9,12]
a = 4
b = 2
x = 16
print(solve(forbidden, a, b, x))

इनपुट

[2,3,7,9,12], 4, 2, 16

आउटपुट

7
  1. Python से DAG में सभी नोड्स तक पहुंचने के लिए मिनिमम वर्टेक्स कैसे ढूंढें? Python से DAG में सभी नोड्स तक पहुंचने के लिए मिनिमम वर्टेक्स कैसे ढूंढें?

    डायरेक्टेड एसाइक्लिक ग्राफ (DAG) में जिन वर्टेक्सेज़ का इन-डिग्री 0 है, उनसे सभी नोड्स पहुंचे जा सकते हैं। एल्गोरिदम सभी नोड्स का सेट बनाएं (0 से n-1)। सभी एजेज़ के डेस्टिनेशन नोड्स (v) का सेट बनाएं। सोर्स नोड्स = सभी नोड्स - डेस्टिनेशन नोड्स (यानी इन-डिग्री 0 वाले)। यही मिनिमम वर्टेक्स सेट है। उद

  1. Python में फोल्डर से होम वापस आने के लिए न्यूनतम जंप खोजें Python में फोल्डर से होम वापस आने के लिए न्यूनतम जंप खोजें

    मान लीजिए हमारे पास लॉग्स हैं जहां हमारे पास फोल्डर में प्रवेश करने का पथ है, वहां अलग-अलग प्रतीक हो सकते हैं जैसे: ../ : वर्तमान से पैरेंट फोल्डर में जाएं। (यदि हम मेन फोल्डर में हैं, तो स्थान न बदलें)। ./ : वर्तमान फोल्डर में रहें। x/ : x नाम के चाइल्ड फोल्डर में जाएं। लॉग्स से हमें अंतिम फोल्

  1. पायथन में शतरंज के नाइट द्वारा टार्गेट पोजीशन तक पहुंचने के लिए न्यूनतम चालें खोजने का प्रोग्राम पायथन में शतरंज के नाइट द्वारा टार्गेट पोजीशन तक पहुंचने के लिए न्यूनतम चालें खोजने का प्रोग्राम

    मान लीजिए हमारे पास दो मान r और c हैं। यदि एक शतरंज नाइट अनंत बड़े शतरंज बोर्ड पर निर्देशांक (0,0) पर रखा गया है, तो हमें (r,c) स्थान तक पहुंचने के लिए न्यूनतम चालों की संख्या ढूंढनी है। नाइट शतरंज की तरह चलता है: दो वर्ग क्षैतिज और एक लंबवत, या दो लंबवत और एक क्षैतिज।उदाहरण के लिए, यदि इनपुट r=6, c