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

पायथन में गंतव्य तक पहुंचने के लिए न्यूनतम संख्या में ऊंचाई बढ़ाने का कार्यक्रम

मान लीजिए कि हमारे पास एक मैट्रिक्स एम है जहां एम [आर] [सी] उस सेल की ऊंचाई का प्रतिनिधित्व करता है। अगर हम वर्तमान में ऊपरी बाएँ कोने में हैं और नीचे दाएँ कोने में जाना चाहते हैं। हम आसन्न कोशिकाओं (ऊपर, नीचे, बाएँ, दाएँ) में तभी जा सकते हैं जब उस आसन्न कोशिका की ऊँचाई वर्तमान कोशिका की ऊँचाई से कम या उसके बराबर हो। आगे बढ़ने से पहले हम किसी भी संख्या में सेल की ऊंचाई बढ़ा सकते हैं, इसलिए हमें न्यूनतम कुल ऊंचाई ढूंढनी होगी जिसे बढ़ाने की जरूरत है ताकि हम नीचे दाएं सेल में जा सकें।

तो, अगर इनपुट पसंद है

2 4 5
8 6 1

तो आउटपुट 4 होगा, क्योंकि हम निम्नलिखित पथ [2, 4, 5, 1] ​​ले सकते हैं और ऊंचाई को इस कॉन्फ़िगरेशन में बदल सकते हैं -

5 5 5
8 6 1

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

आईएनएफ:=अनंत

  • आर, सी:=मैट्रिक्स की पंक्ति संख्या, मैट्रिक्स की कॉलम संख्या

  • pq :=हीप का उपयोग करके एक प्राथमिकता कतार बनाएं, और उसमें [0, R-1, C-1, M[-1, -1]] डालें

  • जिला:=एक नक्शा

  • जिला[आर-1, सी-1, ए[-1, -1]] :=0

  • जबकि pq खाली नहीं है, करें

    • pq से एक तत्व हटाएं और उन्हें d, r, c, h में संग्रहीत करें

    • अगर जिला [आर, सी, एच] <डी, फिर

      • अगले पुनरावृत्ति के लिए जाएं

    • अगर r और c दोनों 0 हैं, तो

      • वापसी d

    • [[r+1, c], [r, c+1], [r-1, c], [r, c-1]] में प्रत्येक जोड़ी (nr, nc) के लिए, do

      • अगर 0 <=एनआर <आर और 0 <=एनसी <सी, तो

        • अगर d2 <जिला[एनआर, एनसी, एच2], तो

          • जिला [एनआर, एनसी, एच 2]:=डी 2

          • pq में [d2, nr, nc, h2] डालें

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

उदाहरण

import collections
import heapq
class Solution:
   def solve(self, A):
      INF = float('inf')
      R, C = len(A), len(A[0])

      pq = [[0, R-1, C-1, A[-1][-1]]]
      dist = collections.defaultdict(lambda: INF)
      dist[R-1, C-1, A[-1][-1]] = 0
      while pq:
         d, r, c, h = heapq.heappop(pq)
         if dist[r, c, h] < d:
            continue
         if r == c == 0:
            return d
         for nr, nc in [[r+1, c], [r, c+1], [r-1, c], [r, c-1]]:
            if 0 <= nr < R and 0 <= nc < C:
               h2 = max(A[nr][nc], h)
               d2 = d + max(h2 - A[nr][nc], 0)
               if d2 < dist[nr, nc, h2]:
                  dist[nr, nc, h2] = d2
                  heapq.heappush(pq, [d2, nr, nc, h2])
ob = Solution()
matrix = [
[2, 4, 5],
[8, 6, 1]
]
print(ob.solve(matrix))

इनपुट

[[2, 4, 5],[8, 6, 1]]

आउटपुट

4

  1. पायथन का उपयोग करके सभी नोड्स तक पहुंचने के लिए न्यूनतम संख्या में कोने खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक निर्देशित चक्रीय ग्राफ है, जिसमें n कोने हैं और नोड्स 0 से n-1 तक गिने जाते हैं, ग्राफ को किनारे की सूची द्वारा दर्शाया जाता है, जहां किनारों [i] =(यू, वी) नोड यू से एक निर्देशित किनारे का प्रतिनिधित्व करता है। नोड वी। हमें शिखर का सबसे छोटा सेट ढूंढना है जिससे ग्राफ में सभ

  1. न्यूनतम संख्या रंग खोजने का कार्यक्रम पायथन में विलय के बाद रहता है

    मान लीजिए हमारे पास रंगों की एक सूची है (आर, जी, बी)। अब अगर दो अलग-अलग रंग एक-दूसरे के बगल में हों तो वे तीसरे रंग की एक ही रंग की वस्तु में बदल सकते हैं। हमें ऐसे परिवर्तनों के किसी भी संभावित क्रम के बाद शेष बची सबसे छोटी संख्या ज्ञात करनी होगी। इसलिए, यदि इनपुट रंग =[G, R, G, B, R] जैसा है, तो

  1. संख्या के कारकों का न्यूनतम योग खोजने के लिए पायथन कार्यक्रम

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे - समस्या कथन किसी संख्या इनपुट को देखते हुए, दी गई संख्या के गुणनखंडों का न्यूनतम योग ज्ञात करें। यहां हम सभी कारकों और उनके संगत योग की गणना करेंगे और फिर उनमें से न्यूनतम का पता लगाएंगे। इसलिए संख्या के गुणनफल का न्यूनतम योग ज्