다리 건설 (라지)
시간 제한5초메모리 제한512 MB
숲에서 출발해 모든 섬을 다리로 연결하되, 각 다리 비용이 가장 가까운 숲에서의 이동 거리일 때 최소 총 작업 시간을 구한다.
문제
왕은 다리를 놓고 싶어 하고, 되도록 빨리 놓고 싶어 한다. 왕의 땅은 격자다. 인접한 두 칸 사이에는 강이 흘러서 칸마다 서로 떨어져 있다. 각 칸은 섬이거나 호수이고, 호수에는 다리를 놓지 않아도 된다.
섬 중 일부는 나무가 많은 숲이다. 왼쪽 위 칸은 베이스캠프이고, 이 칸은 항상 숲이다.
다리는 세로나 가로로 인접한 두 섬 사이에만 놓을 수 있다. 또 두 섬 중 하나는 이미 놓인 다리를 따라 베이스캠프에서 갈 수 있어야 한다.
다리 하나를 놓는 데 드는 인시(man-hour)는 가장 가까운 숲에서 출발해 다리를 놓을 섬까지 건너야 하는 다리의 수이고, 지금 놓는 다리도 센다. 인부는 다리가 이미 놓인 두 섬 사이만 걸어서 건넌다.
왕은 모든 섬을 연결하는 방법이 적어도 하나 있도록 미리 준비해 두었다. 지도가 주어질 때 모든 섬을 연결하는 데 드는 최소 인시를 구하라.
다음 지도를 보자. 초록색 칸은 숲, 회색 칸은 나무가 없는 섬, 파란색 칸은 물이다.

최적해 하나는 베이스캠프의 숲에서 다음 다리부터 놓는다.

여기에 드는 인시는 이다.
이제 3행 3열의 숲이 베이스캠프와 이어졌으므로 그 숲에서도 다리를 놓을 수 있다. 최적해 하나는 남은 섬을 그 숲에서 놓은 다리로 잇는다.

여기에 드는 인시는 이다. 전체 인시는 24이고, 이 값이 최솟값이다.
입력
첫째 줄에 테스트 케이스의 수 가 주어진다. 각 테스트 케이스의 첫째 줄에는 행의 수 과 열의 수 이 공백을 두고 주어진다. 이어지는 개의 줄에는 각각 정확히 개의 문자가 주어진다. T는 숲이 있는 섬, #은 나무가 없는 섬, .은 물이다.
제한
- 왼쪽 위 칸은 항상
T다. - 모든 섬을 다리로 연결하는 방법이 항상 존재한다.
- 격자에 있는 숲의 개수에는 제한이 없다.
출력
각 테스트 케이스마다 Case #X: Y 형식으로 한 줄씩 출력한다. 는 1부터 시작하는 테스트 케이스 번호이고, 는 모든 섬을 연결하는 데 드는 최소 인시다.