아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

사슬에 갇힌 최단 경로

시간 제한1초메모리 제한128 MB

요약
이웃한 원들이 두 점에서 만나는 원 사슬에서 첫 원의 중심부터 마지막 원의 중심까지 원들의 합집합 내부를 지나는 최단 경로의 길이를 구한다.
난이도

어려움10점 중 8점

유형
기하, 최단 경로, 그래프, 수학
정답자
아직 제출이 없습니다

문제

평면 위에 여러 개의 원으로 이루어진 사슬이 있다. 사슬의 첫 번째 원은 두 번째 원하고만 만나고, 마지막 원은 바로 앞 원하고만 만나며, 그 사이의 각 원은 자신의 양옆 두 원하고만 만난다.

다음 두 조건을 모두 만족하는 최단 경로를 구하라.

  • 경로는 첫 번째 원의 중심과 마지막 원의 중심을 잇는다.
  • 경로는 사슬 안에 갇혀 있다. 즉 경로 위의 모든 점은 적어도 하나의 원 내부 또는 그 경계 위에 있다.

아래 그림은 이러한 사슬과 그에 대응하는 최단 경로의 예이다.

사슬과 그에 대응하는 최단 경로의 예.

입력

입력은 여러 개의 데이터셋으로 이루어진다. 각 데이터셋은 하나의 사슬을 다음 형식으로 나타낸다.

n
x1 y1 r1
x2 y2 r2
...
xn yn rn

데이터셋의 첫 줄에는 원의 개수를 나타내는 정수 nn (3≤n≤1003 \le n \le 100)이 주어진다. 이어지는 nn개의 줄에는 각각 공백 하나로 구분된 정수 세 개가 주어지며, (xi,yi)(x_i, y_i)는 ii번째 원 CiC_i의 중심, rir_i은 그 반지름이다. 0≤xi≤10000 \le x_i \le 1000, 0≤yi≤10000 \le y_i \le 1000, 1≤ri≤251 \le r_i \le 25임이 보장된다.

CiC_i와 Ci+1C_{i+1} (1≤i≤n−11 \le i \le n-1)은 서로 다른 두 점에서 만난다. j≥i+2j \ge i+2인 경우 CiC_i와 CjC_j는 서로 떨어져 있으며 어느 쪽도 다른 쪽을 포함하지 않는다. 또한 어떤 원도 다른 원의 중심을 포함하지 않는다.

입력의 끝은 0 하나만 있는 줄로 나타낸다.

아래 그림은 여러 사슬 예에 대한 최단 경로를 보여준다.

여러 사슬 예와 그에 대응하는 최단 경로.

출력

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

예제2

  1. 예제 1

    입력
    10
    802 0 10
    814 0 4
    820 1 4
    826 1 4
    832 3 5
    838 5 5
    845 7 3
    849 10 3
    853 14 4
    857 18 3
    3
    0 0 5
    8 0 5
    8 8 5
    3
    0 0 5
    7 3 6
    16 0 5
    9
    0 3 5
    8 0 8
    19 2 8
    23 14 6
    23 21 6
    23 28 6
    19 40 8
    8 42 8
    0 39 5
    11
    0 0 5
    8 0 5
    18 8 10
    8 16 5
    0 16 5
    0 24 5
    3 32 5
    10 32 5
    17 28 8
    27 25 3
    30 18 5
    0
    
    예상 출력
    58.953437
    11.414214
    16.000000
    61.874812
    63.195179
    
  2. 예제 2

    입력
    3
    0 0 5
    9 0 5
    18 0 5
    0
    
    예상 출력
    18.000000