PSNote/Problem Solving

[BOJ-1167]트리의지름

WONDY 2017. 7. 17. 04:06

트리의 지름을 구하는 문제


어느 지점에서 시작해도 가장 먼 노드가 시작노드가 되며, 이때 1-BFS 를 사용하고,

두번째, 시작노드를 구했다면, 2-BFS 를 사용하여 "트리의 지름" 을 구한다. 


총 2번의 BFS를 사용하여 결과를 구할 수 있다.


먼저, 모든 입력을 받는다.

(1) 임의의 노드를 선택한다. (코드에선 1을 지정)

(2) (1)에 선택한 노드를 방문 표시한 후 Q에 넣는다.

(3) 1-BFS

1) Q에서 노드(here)를 꺼낸다. 

2) 꺼낸 노드(here)와 연결되어 있고, 방문하지 않은 노드(there.first)를 방문한다.

3) 방문한 노드의 이동 비용을 update 한 후, 노드방문표시, Q에 넣는다.

4) Q에 넣는 노드가 도달비용이 최대라면 max_node , max_cost를 업데이트 한다.

(4) 2-BFS 

(3) 의 과정을 완료하면, 시작노드를 구한 것이다. 시작노드부터 BFS를 하여 가장 먼 위치에 있는 노드와의 비용을 구한다.

(5) 비용을 출력한다.