각 항목이 보유하고 있는 에지 목록이 있다고 가정합니다. (u, v)는 u가 v의 부모임을 나타냅니다. 트리에서 가장 긴 경로의 길이를 찾아야 합니다. 경로 길이는 1 + 해당 경로의 노드 수입니다.
따라서 입력이 다음과 같으면

경로가 [1, 4, 5, 7]이기 때문에 출력은 5가 되고 총 4개의 노드가 있으므로 경로 길이는 1 + 4 =5입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- g :=주어진 에지 목록에서 그래프의 인접 목록
- d :=새 지도
- bfs() 함수를 정의합니다. 시간이 걸립니다
- 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