문제 분류 수업 진도 대회 채점현황 순위 질문게시판
게임
스도쿠 타이핑 리듬 타자게임 타이핑 테트리스 타이핑 인베이더 타이핑 지뢰찾기 8192 공룡게임 타이핑 플래피버드 랭킹
로그인

6015 : 상태공간 탐색 — 15-퍼즐

•시간제한: 2.000 S •메모리제한: 256 MB •제출: 0 •통과: 0 •만든사람: suakii

6015 : 상태공간 탐색 — 15-퍼즐

시간 2.000s · 메모리 256MB · 제출 0 · 정답 0

문제 설명

15-퍼즐은 $4 \times 4$ 크기의 판 위에 $1$부터 $15$까지의 숫자가 적힌 타일과 하나의 빈칸(0)이 있고, 빈칸과 인접한 타일을 밀어 움직여 타일들을 정렬하는 퍼즐입니다.
목표 상태는 다음과 같이 순서대로 정렬되는 것입니다:
1 2 3 4 / 5 6 7 8 / 9 10 11 12 / 13 14 15 0

초기 배치 상태가 주어질 때, 목표 상태를 만드는 데 필요한 최소 타일 이동 횟수를 구하십시오.
탐색 도중 시간 및 메모리를 절약하기 위해, 빈칸 이동에 의한 타일의 Inversion Count를 이용해 풀이 가능 여부(Solvability)를 조기에 판별하고, IDA* (Iterative Deepening A*) 알고리즘을 사용해 휴리스틱 가치를 계산하여 해결하십시오.

[제약 조건]
• 입력은 $4 \times 4$ 격자이며, 0은 빈칸을 나타냅니다.
• 숫자 1~15가 중복 없이 주어집니다.
• 풀이 불가능한 경우 -1을 출력합니다.

입력 설명

$4$개의 줄에 걸쳐 각 줄에 $4$개의 정수가 공백으로 구분되어 주어집니다. (0은 빈칸을 나타내며, 1부터 15까지의 숫자가 중복 없이 주어집니다)

출력 설명

목표 상태를 만드는 데 필요한 최소 이동 횟수를 출력합니다. 만약 목표 상태를 만드는 것이 원천적으로 불가능한 배치인 경우에는 -1을 출력합니다.

입력 예시
COPY
복사되었습니다!

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 0

출력 예시
COPY
복사되었습니다!

0

도움

각 숫자의 현재 위치와 목표 위치 간의 맨해튼 거리(Manhattan Distance) 합을 휴리스틱 $h(x)$로 사용합니다. Solvability 판별법: (Inversion_Count + 빈칸행의_밑에서부터의_번호) % 2 === 1인 경우에만 완성할 수 있습니다.
NOTICE  —  BFStudy OJ 정보샘
애들아, 문제 많이 풀고 게임 잠깐 하는거지?
— 정보샘