사슬에 갇힌 최단 경로
시간 제한1초메모리 제한128 MB
이웃한 원들이 두 점에서 만나는 원 사슬에서 첫 원의 중심부터 마지막 원의 중심까지 원들의 합집합 내부를 지나는 최단 경로의 길이를 구한다.
문제
평면 위에 여러 개의 원으로 이루어진 사슬이 있다. 사슬의 첫 번째 원은 두 번째 원하고만 만나고, 마지막 원은 바로 앞 원하고만 만나며, 그 사이의 각 원은 자신의 양옆 두 원하고만 만난다.
다음 두 조건을 모두 만족하는 최단 경로를 구하라.
- 경로는 첫 번째 원의 중심과 마지막 원의 중심을 잇는다.
- 경로는 사슬 안에 갇혀 있다. 즉 경로 위의 모든 점은 적어도 하나의 원 내부 또는 그 경계 위에 있다.
아래 그림은 이러한 사슬과 그에 대응하는 최단 경로의 예이다.

사슬과 그에 대응하는 최단 경로의 예.
입력
입력은 여러 개의 데이터셋으로 이루어진다. 각 데이터셋은 하나의 사슬을 다음 형식으로 나타낸다.
n
x1 y1 r1
x2 y2 r2
...
xn yn rn
데이터셋의 첫 줄에는 원의 개수를 나타내는 정수 ()이 주어진다. 이어지는 개의 줄에는 각각 공백 하나로 구분된 정수 세 개가 주어지며, 는 번째 원 의 중심, 은 그 반지름이다. , , 임이 보장된다.
와 ()은 서로 다른 두 점에서 만난다. 인 경우 와 는 서로 떨어져 있으며 어느 쪽도 다른 쪽을 포함하지 않는다. 또한 어떤 원도 다른 원의 중심을 포함하지 않는다.
입력의 끝은 0 하나만 있는 줄로 나타낸다.
아래 그림은 여러 사슬 예에 대한 최단 경로를 보여준다.

여러 사슬 예와 그에 대응하는 최단 경로.
출력
각 데이터셋에 대해, 첫 번째 원의 중심과 마지막 원의 중심을 잇는 사슬에 갇힌 최단 경로의 길이를 한 줄에 하나씩 출력한다. 값은 소수점 아래 정확히 여섯 자리까지 출력한다(예: 16.000000). 그 외의 문자는 출력하지 않는다.