मान लीजिए कि हमारे पास एक किनारे की सूची है जहां प्रत्येक आइटम धारण कर रहा है (यू, वी) दर्शाता है कि आप वी के माता-पिता हैं। हमें पेड़ में सबसे लंबे पथ की लंबाई का पता लगाना है। पथ की लंबाई उस पथ में 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 डालें
- यदि y d में नहीं है, तो
- g में प्रत्येक y के लिए[x], करें
- वापसी 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