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

पायथन में सबसे लंबी मैट्रिक्स पथ लंबाई की लंबाई खोजने का कार्यक्रम

मान लीजिए हमारे पास एक बाइनरी मैट्रिक्स है, जहां 0 खाली सेल को इंगित करता है और 1 दीवार को इंगित करता है। हम पहली पंक्ति पर किसी भी खाली सेल से शुरू कर सकते हैं और अंतिम पंक्ति पर किसी भी खाली सेल पर समाप्त करना चाहते हैं। हम बाएँ, दाएँ या नीचे जा सकते हैं, हमें सबसे लंबा ऐसा रास्ता खोजना होगा जहाँ हम एक बार में प्रत्येक कोशिका पर जा सकें। अगर यह संभव नहीं है, तो 0 वापस करें।

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

0 0 0 0
0 0 0 1
0 0 0 0

तो आउटपुट 10 होगा, जैसा कि हम स्थानांतरित कर सकते हैं (0, 3), (0, 2), (0, 1), (0, 0), (1, 0), (1, 1), (1, 2), (2, 2),(2, 1), (2, 0)।

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

  • N :=मैट्रिक्स की पंक्ति गणना
  • M :=मैट्रिक्स की कॉलम संख्या
  • dp :=आकार M की सूची और -1 से भरें
  • मैं के लिए 0 से एन -1 की सीमा में, करो
    • ndp :=आकार M की सूची और -1 से भरें
    • ndp2 :=आकार M की सूची और -1 से भरें
    • जे के लिए 0 से एम -1 की सीमा में, करो
      • यदि मैट्रिक्स [i, j] 1 नहीं है और (i 0 या dp[j]> -1 के समान है), तो
        • ndp[j] :=dp[j] + 1
        • ndp2[j] :=dp[j] + 1
    • जे के लिए 1 से एम -1 की सीमा में, करो
      • यदि मैट्रिक्स [i, j] 1 नहीं है और ndp[j - 1]> -1 है, तो
        • ndp[j] :=अधिकतम ndp[j] और (ndp[j - 1] + 1)
    • जे के लिए एम - 2 से 0 तक, 1 से घटाएं
      • यदि मैट्रिक्स [i, j] 1 नहीं है और ndp2 [j + 1]> -1 है, तो
        • ndp2[j] :=अधिकतम ndp2[j] और (ndp2[j + 1] + 1)
        • ndp[j] :=अधिकतम ndp[j] और ndp2[j]
    • डीपी:=एनडीपी
  • रिटर्न (अधिकतम डीपी) + 1

उदाहरण

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

def solve(matrix):
   N = len(matrix)
   M = len(matrix[0])
   dp = [-1 for i in matrix[0]]
   for i in range(N):
      ndp = [-1 for j in matrix[0]]
      ndp2 = [-1 for j in matrix[0]]
      for j in range(M):
         if matrix[i][j] != 1 and (i == 0 or dp[j] > -1):
            ndp[j] = dp[j] + 1
            ndp2[j] = dp[j] + 1

      for j in range(1, M):
         if matrix[i][j] != 1 and ndp[j - 1] > -1:
            ndp[j] = max(ndp[j], ndp[j - 1] + 1)

      for j in range(M - 2, -1, -1):
         if matrix[i][j] != 1 and ndp2[j + 1] > -1:
            ndp2[j] = max(ndp2[j], ndp2[j + 1] + 1)
            ndp[j] = max(ndp[j], ndp2[j])

      dp = ndp
   return max(dp) + 1

matrix = [
[0, 0, 0, 0],
[0, 0, 0, 1],
[0, 0, 0, 0]
]
print(solve(matrix))

इनपुट

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

आउटपुट

10

  1. पायथन में दोहराए गए नोड्स के बिना डीएजी में सबसे लंबे पथ की लंबाई खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक निर्देशित चक्रीय ग्राफ है जो आसन्न सूची द्वारा दर्शाया गया है। हमें ग्राफ़ में नोड दोहराव के बिना सबसे लंबा रास्ता खोजना होगा। तो, अगर इनपुट पसंद है 2 लंबाई 4 के साथ है। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - उत्तर:=0 n :=ग्राफ़ की नोड संख्या तालिका :=आकार n

  1. अजगर में एक बाइनरी ट्री के सबसे लंबे क्रमागत पथ की लंबाई ज्ञात करने का कार्यक्रम

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें बाइनरी ट्री में सबसे लंबा रास्ता खोजना होगा। तो, अगर इनपुट पसंद है तो आउटपुट 5 होगा क्योंकि लगातार सबसे लंबा क्रम [2, 3, 4, 5, 6] है। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - यदि रूट रिक्त है, तो वापसी 0 मैक्सपाथ:=0 एक फंक्शन हेल्पर () को प

  1. पायथन में एक बाइनरी ट्री के सबसे लंबे वैकल्पिक पथ की लंबाई खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है, हमें सबसे लंबा रास्ता खोजना है जो बाएं और दाएं बच्चे और नीचे जाने के बीच वैकल्पिक हो। तो, अगर इनपुट पसंद है तो आउटपुट 5 होगा क्योंकि वैकल्पिक पथ [2, 4, 5, 7, 8] है। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे: यदि रूट रिक्त है, तो वापसी 0 एक फ़ंक्