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

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

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

उदाहरण के लिए, यदि इनपुट है:

0000
0001
0000

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

एल्गोरिदम

  1. N := मैट्रिक्स की पंक्ति संख्या
  2. M := मैट्रिक्स की कॉलम संख्या
  3. dp := आकार M की सूची, -1 से भरी हुई
  4. प्रत्येक पंक्ति i के लिए 0 से N-1 तक:
    • ndp और ndp2 को -1 से भरी सूचियों के रूप में आरंभ करें
    • बाएं से दाएं पास: ndp को अपडेट करें
    • दाएं से बाएं पास: ndp2 को अपडेट करें और ndp के साथ मर्ज करें
    • dp := ndp
  5. max(dp) + 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))  # आउटपुट: 10

इनपुट

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

आउटपुट

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

    मान लीजिए हमारे पास एक डायरेक्टेड एसाइक्लिक ग्राफ (DAG) है जिसे एडजेसेंसी लिस्ट द्वारा दर्शाया गया है। हमें ग्राफ में बिना नोड दोहराव के सबसे लंबे पथ को ढूंढना है।उदाहरण के लिए, यदि इनपुट ग्राफ है:तो आउटपुट 4 होगा, क्योंकि पथ 0 → 1 → 3 → 4 → 2 है जिसकी लंबाई 4 है।समाधान दृष्टिकोणइस समस्या को हल करने

  1. Python में बाइनरी ट्री के सबसे लंबे लगातार पथ की लंबाई खोजने का प्रोग्राम Python में बाइनरी ट्री के सबसे लंबे लगातार पथ की लंबाई खोजने का प्रोग्राम

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

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

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