ধরুন আমাদের একটি প্রান্ত তালিকা আছে যেখানে প্রতিটি আইটেম ধরে আছে (u, v) প্রতিনিধিত্ব করে u হল v এর মূল। আমাদের গাছের দীর্ঘতম পথের দৈর্ঘ্য খুঁজে বের করতে হবে। পথের দৈর্ঘ্য হল 1 + সেই পথে নোডের সংখ্যা।
সুতরাং, যদি ইনপুট মত হয়

তাহলে আউটপুট হবে 5, কারণ পাথ হল [1, 4, 5, 7], মোট 4টি নোড আছে, তাই পাথের দৈর্ঘ্য হল 1 + 4 =5৷
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- g :=প্রদত্ত প্রান্ত তালিকা থেকে গ্রাফের সংলগ্ন তালিকা
- d :=একটি নতুন মানচিত্র
- একটি ফাংশন bfs() সংজ্ঞায়িত করুন। এটি o লাগবে৷
- d[o] :=1
- f :=o
- q :=[o]
- q এর প্রতিটি x এর জন্য, করুন
- g[x] এ প্রতিটি y এর জন্য, করুন
- যদি y d-এ না থাকে, তাহলে
- d[y] :=d[x] + 1
- যদি d[y]> d[f] হয়, তাহলে
- f :=y
- q তে y ঢোকান
- যদি y d-এ না থাকে, তাহলে
- g[x] এ প্রতিটি y এর জন্য, করুন
- রিটার্ন f
- প্রধান পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন -
- g এর প্রতিটি o এর জন্য, করুন
- f :=bfs(o)
- d :=একটি নতুন মানচিত্র
- রিটার্ন d[bfs(f)]
- রিটার্ন 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