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

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

칸 외판원

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

요약
X행 Y열 격자의 S에서 출발해 모든 칸을 방문하고 S로 돌아오는 최소 걸음 수를 구한 뒤 마지막에 LOL을 한 줄 출력합니다.
난이도

보통10점 중 6점

유형
수학, 그래프
정답자
아직 제출이 없습니다

문제

프로젝트 오일러 문제를 전부 머릿속으로 풀었으니, 이제 결정 버전이 NP-완전인 고전 문제, 외판원 순회를 볼 차례다.

이 문제의 무대는 직사각형 격자다. 한 번의 이동은 지금 있는 칸과 변을 맞댄 칸으로 가는 것이고, 따라서 각 칸은 위, 아래, 왼쪽, 오른쪽 칸과 이어져 있다. 같은 칸에는 원하는 만큼 여러 번 들어갈 수 있다. 물론 대부분의 칸은 두 번 볼 만큼 재미있지 않다.

정확히 한 칸에 S가 적혀 있다. S에서 출발해 격자의 모든 칸을 적어도 한 번 밟고 다시 S로 돌아온다. 이런 왕복에 필요한 최소 이동 횟수를 구한다.

입력

첫 줄에 테스트 케이스의 수 TT가 주어진다. 각 테스트 케이스의 첫 줄에는 격자의 너비 XX와 높이 YY가 주어진다. 이어서 XX개의 문자로 이루어진 줄이 YY개 주어진다. 문자 C는 평범한 칸이고, 문자 S는 출발점이다.

  • 0<T≤500 < T \le 50
  • 0<X≤1000 < X \le 100
  • 0<Y≤1000 < Y \le 100
  • 한 테스트 케이스에서 문자 하나만 S이고 나머지는 모두 C다.

출력

각 테스트 케이스마다 S에서 출발해 모든 칸을 적어도 한 번 방문하고 S로 돌아오는 왕복의 최소 이동 횟수를 한 줄에 출력한다.

이래 봐야 아무 데도 이르지 못한다는 것을 이미 알고 있으니, 마지막 테스트 케이스 뒤에 LOL만 적힌 줄을 출력한다. 테스트 케이스마다가 아니라 실행 한 번에 한 줄만 출력한다.

예제2

  1. 예제 1

    입력
    1
    4 4
    CCCC
    CCCC
    CSCC
    CCCC
    
    예상 출력
    16
    LOL
    
  2. 예제 2

    입력
    3
    1 1
    S
    3 1
    CSC
    1 3
    C
    C
    S
    
    예상 출력
    0
    4
    4
    LOL