สมมุติว่าเรามี edge list ที่แต่ละอันมีไว้ (u, v) แทน u เป็น parent ของ v. เราต้องหาความยาวของ path ที่ยาวที่สุดใน tree ความยาวเส้นทางคือ 1 + จำนวนโหนดในเส้นทางนั้น
ดังนั้นหากอินพุตเป็นแบบ

จากนั้นผลลัพธ์จะเป็น 5 เนื่องจากเส้นทางคือ [1, 4, 5, 7] มีทั้งหมด 4 โหนด ดังนั้นความยาวเส้นทางคือ 1 + 4 =5
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- g :=รายการที่อยู่ติดกันของกราฟจากรายการขอบที่กำหนด
- d :=แผนที่ใหม่
- กำหนดฟังก์ชัน bfs() นี้จะใช้เวลา o
- d[o] :=1
- f :=o
- q :=[o]
- สำหรับแต่ละ x ใน q ทำ
- สำหรับแต่ละ y ใน g[x] ทำ
- ถ้า y ไม่อยู่ใน d แล้ว
- d[y] :=d[x] + 1
- ถ้า d[y]> d[f] แล้ว
- f :=y
- แทรก y ใน q
- ถ้า y ไม่อยู่ใน d แล้ว
- สำหรับแต่ละ y ใน g[x] ทำ
- กลับมา f
- จากวิธีหลัก ให้ทำดังต่อไปนี้ −
- สำหรับแต่ละ o ใน g ทำ
- 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