만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

Missing Piece 2001

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

요약
슬라이딩 퍼즐의 시작 배치에서 목표 배치까지 주어진 횟수 안에 도달할 수 있는지 판단하고 최소 이동 횟수를 보고합니다.
난이도

보통10점 중 7점

유형
백트래킹, BFS, 그래프
정답자
아직 제출이 없습니다

문제

Wiltin' Badley는 숫자 조각을 밀어서 맞추는 옛날 퍼즐을 다시 만들어 Missing Piece 2001이라는 이름으로 내놓았다. 이 제품에는 퍼즐이 얼마나 어려운지 미리 알려 주는 프로그램이 딸려 온다. 플레이어가 처음 배치와 목표 배치를 입력하면 프로그램은 정해진 횟수 안에 퍼즐을 맞출 수 있는지 판정하고, 맞출 수 있으면 목표 배치를 만드는 데 필요한 최소 이동 횟수를 알려 준다. 당신이 이 프로그램을 만들어야 한다.

판의 크기, 맞추고 싶은 이동 횟수, 처음 배치, 목표 배치를 모두 사용자가 입력한다. 크기가 다른 판도 따로 팔기 때문에 프로그램은 어떤 크기든 처리해야 한다.

빈 칸 X와 상하좌우로 맞닿은 조각 하나를 빈 칸 쪽으로 밀면 한 번의 이동이다. 빈 칸과 맞닿지 않은 조각은 움직일 수 없고, 이동 방향은 위, 아래, 왼쪽, 오른쪽뿐이다.

입력

입력은 데이터 집합이 최대 10개 이어진 형태이고, 적어도 하나는 주어진다. 데이터 집합 사이에 빈 줄은 없다.

각 데이터 집합은 네 부분으로 이루어진다.

  1. 시작 줄: START D N 형식의 한 줄이며, 3≤D≤103 \le D \le 10, 0≤N≤150 \le N \le 15이다.
  2. 처음 배치: D×DD \times D 행렬로, 1 이상 D2−1D^2 - 1 이하의 정수와 빈 칸을 뜻하는 X가 들어간다. 퍼즐을 풀기 전 판의 상태이다.
  3. 목표 배치: 같은 형식의 D×DD \times D 행렬이며, 퍼즐을 맞췄다고 인정하는 판의 상태이다.
  4. 끝 줄: END 한 줄

DD는 판의 한 변의 길이이고, NN은 플레이어가 그 안에 퍼즐을 맞추고 싶은 이동 횟수이다. 두 배치 모두 1부터 D2−1D^2 - 1까지의 수가 빠짐없이 한 번씩 들어가고 빈 칸 X는 정확히 하나이며, 빠진 수나 겹치는 수는 없다.

출력

데이터 집합마다 한 줄씩 출력하고, 출력 사이에는 빈 줄을 하나 넣는다.

정해진 이동 횟수 안에 목표 배치를 만들 수 있으면 판정 문자열은 SOLVABLE이고, 뒤따르는 수는 목표 배치를 만드는 데 필요한 최소 이동 횟수이다. 만들 수 없으면 판정 문자열은 NOT SOLVABLE이고, 뒤따르는 수는 입력으로 주어진 NN을 그대로 적는다.

각 줄의 형식은 다음과 같다.

<판정 문자열> WITHIN <이동 횟수> MOVES

WITHIN과 MOVES는 있는 그대로 출력하고, 이동 횟수가 1일 때도 MOVES라고 적는다.

예제1

  1. 예제 1

    입력
    START 3 4
    1 5 2
    4 X 3
    7 8 6
    1 2 3
    4 5 6
    7 8 X
    END
    START 3 3
    1 2 3 
    7 X 8
    6 5 4
    1 2 3 
    8 X 4
    7 6 5
    END
    START 4 10
    1 X 2 4
    5 6 3 7
    9 10 11 8
    12 13 14 15
    1 2 3 4
    5 6 7 8
    9 10 X 11
    12 13 14 15
    END
    
    예상 출력
    SOLVABLE WITHIN 4 MOVES
    
    NOT SOLVABLE WITHIN 3 MOVES
    
    SOLVABLE WITHIN 5 MOVES