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

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


मान लीजिए हमारे पास एक डायरेक्टेड एसाइक्लिक ग्राफ (DAG) है जिसे एडजेसेंसी लिस्ट द्वारा दर्शाया गया है। हमें ग्राफ में बिना नोड दोहराव के सबसे लंबे पथ को ढूंढना है।

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

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

तो आउटपुट 4 होगा, क्योंकि पथ 0 → 1 → 3 → 4 → 2 है जिसकी लंबाई 4 है।

समाधान दृष्टिकोण

इस समस्या को हल करने के लिए हम DFS + मेमोइजेशन (DP) का उपयोग करेंगे:

  • ans := 0
  • n := ग्राफ में नोड्स की संख्या
  • table := आकार n की लिस्ट, -1 से भरी हुई
  • dfs(u) फंक्शन परिभाषित करें:
    • यदि table[u] != -1 है, तो table[u] लौटाएं
    • p_len := 0
    • graph[u] के प्रत्येक वर्टेक्स v के लिए:
      • p_len := max(p_len, 1 + dfs(v))
    • table[u] := p_len
    • p_len लौटाएं
  • मुख्य मेथड में, प्रत्येक i के लिए 0 से n-1 तक:
    • ans := max(ans, dfs(i))
  • ans लौटाएं

पायथन कार्यान्वयन

class Solution:
    def solve(self, graph):
        ans = 0
        n = len(graph)
        table = [-1] * n
        def dfs(u):
            if table[u] != -1:
                return table[u]
            p_len = 0
            for v in graph[u]:
                p_len = max(p_len, 1 + dfs(v))
            table[u] = p_len
            return p_len
        for i in range(n):
            ans = max(ans, dfs(i))
        return ans

ob = Solution()
graph = [
    [1, 2],
    [3, 4],
    [],
    [4],
    [2],
]
print(ob.solve(graph))

इनपुट

graph = [[1, 2],[3, 4],[],[4],[2]]

आउटपुट

4
  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