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

पायथन में एक एन-आरी पेड़ में सबसे लंबे पथ की लंबाई खोजने का कार्यक्रम

मान लीजिए कि हमारे पास एक किनारे की सूची है जहां प्रत्येक आइटम धारण कर रहा है (यू, वी) दर्शाता है कि आप वी के माता-पिता हैं। हमें पेड़ में सबसे लंबे पथ की लंबाई का पता लगाना है। पथ की लंबाई उस पथ में 1 + नोड्स की संख्या है।

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

पायथन में एक एन-आरी पेड़ में सबसे लंबे पथ की लंबाई खोजने का कार्यक्रम

तो आउटपुट 5 होगा, क्योंकि पथ [1, 4, 5, 7] है, कुल 4 नोड हैं, इसलिए पथ की लंबाई 1 + 4 =5 है।

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

  • g :=दी गई किनारे सूची से ग्राफ़ की आसन्नता सूची
  • d :=एक नया नक्शा
  • एक फ़ंक्शन को परिभाषित करें bfs() । इसमें o
  • . लगेगा
  • d[o] :=1
  • f :=o
  • क्यू:=[ओ]
  • क्यू में प्रत्येक x के लिए, करें
    • g में प्रत्येक y के लिए[x], करें
      • यदि y d में नहीं है, तो
        • d[y] :=d[x] + 1
        • अगर घ[y]> d[f], तो
          • f :=y
        • q में y डालें
  • वापसी f
  • मुख्य विधि से, निम्न कार्य करें -
  • जी में प्रत्येक ओ के लिए, करें
    • f :=bfs(o)
    • d :=एक नया नक्शा
    • रिटर्न डी[बीएफएस(एफ)]
  • वापसी 0

उदाहरण

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

def solve(edges):
   g = {}
   for u, v in edges:
      if u not in g:
         g[u] = []
      g[u] += (v,)
      if v not in g:
         g[v] = []
      g[v] += (u,)
   d = {}

   def bfs(o):
      d[o] = 1
      f = o
      q = [o]
      for x in q:
         for y in g[x]:
            if y not in d:
               d[y] = d[x] + 1
               if d[y] > d[f]:
                  f = y
               q += (y,)
      return f

   for o in g:
      f = bfs(o)
      d = {}
      return d[bfs(f)]
   return 0

edges = [(1, 2),(1, 3),(1, 4),(4, 5),(5,7),(1,6),(4,8)]
print(solve(edges))

इनपुट

[(1, 2),(1, 3),(1, 4),(4, 5),(5,7),(1,6),(4,8)]

आउटपुट

5

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

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

  1. पायथन में एक बाइनरी ट्री की जड़ से पत्ती तक सबसे लंबे योग पथ का योग खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है, हमें रूट से लीफ नोड तक के सबसे लंबे पथ का योग ज्ञात करना है। यदि दो समान लंबे पथ हैं, तो पथ को अधिक राशि के साथ लौटाएं। तो, अगर इनपुट पसंद है तो आउटपुट 20 होगा। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - फ़ंक्शन rec() को परिभाषित करें। यह कठिन

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

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