나이트의 추격

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

요약
판 크기와 폰, 나이트의 시작 위치가 주어질 때 나이트가 승리할 수 있는지, 무승부를 강제할 수 있는지, 패배하는지를 판정하고 최소 나이트 이동 수를 구한다.
난이도

보통10점 중 7점

유형
BFS, 시뮬레이션, 게임 이론, 구현
정답자
아직 제출이 없습니다

문제

체스에서 각 기물은 종류에 따라 정해진 방식으로 8×88 \times 8 판 위를 움직인다. 게임의 목표는 상대 기물이 있는 칸으로 이동해 그 기물을 잡고, 최종적으로 킹을 몰아넣는 것이다.

이 변형 게임에서는 크기가 다양한 판 위에 단 22개의 기물만 놓는다.

  • 흰색 폰: 매 이동마다 판의 맨 윗줄을 향해 위쪽으로 곧장 한 칸씩 전진한다.
  • 검은색 나이트: 현재 칸에서 최대 여덟 방향으로 움직일 수 있다. 위나 아래로 두 칸 그리고 왼쪽이나 오른쪽으로 한 칸, 또는 위나 아래로 한 칸 그리고 왼쪽이나 오른쪽으로 두 칸이다. 나이트는 항상 판 위에 있어야 하며, 판 밖으로 나가는 이동은 허용되지 않는다.

아래 그림에서 나이트의 위치는 KK로, 나이트가 이동할 수 있는 칸은 11부터 88까지로 표시했다.

. . . . . . .
. . 8 . 1 . .
. 7 . . . 2 .
. . . K . . .
. 6 . . . 3 .
. . 5 . 4 . .
. . . . . . .

폰이 먼저 움직이고, 그다음부터 나이트와 폰이 번갈아 움직인다. 나이트는 자기 차례마다 폰이 있는 칸으로 이동하면 승리(Win), 폰 바로 위 칸으로 이동하면 무승부(Stalemate)가 된다. 폰이 판의 맨 윗줄에 도달하면 게임은 즉시 끝나고 나이트는 패배(Loss)한다.

각 게임에 대해, 나이트가 이길 수 있는지와 이길 수 있다면 필요한 최소 이동 횟수를 구하라. 이길 수 없다면 무승부를 만들 수 있는지와, 만들 수 있다면 필요한 최소 이동 횟수를 구하라. 승리도 무승부도 만들 수 없다면, 폰이 이기기 전까지 나이트가 움직이는 횟수를 구하라.

입력

첫째 줄에 분석할 게임의 수를 나타내는 양의 정수 nn이 주어진다.

각 게임은 여섯 줄로 주어진다.

  • rr — 판의 행 수 (3≤r<100)(3 \le r < 100)
  • cc — 판의 열 수 (2≤c<100)(2 \le c < 100)
  • prpr — 폰의 시작 행 (1≤pr≤r)(1 \le pr \le r)
  • pcpc — 폰의 시작 열 (1≤pc≤c)(1 \le pc \le c)
  • krkr — 나이트의 시작 행 (1≤kr≤r)(1 \le kr \le r)
  • kckc — 나이트의 시작 열 (1≤kc≤c)(1 \le kc \le c)

행 11은 판의 맨 아랫줄, 행 rr은 맨 윗줄이다. 열 11은 가장 왼쪽, 열 cc는 가장 오른쪽이다. 폰과 나이트의 시작 위치는 항상 서로 다르다.

출력

각 게임마다 정확히 한 줄을 출력한다.

  • 나이트가 이길 수 있으면 Win in K knight move(s).을 출력한다. 여기서 KK는 최소 이동 횟수이다.
  • 이길 수는 없지만 무승부를 만들 수 있으면 Stalemate in K knight move(s).을 출력한다. 여기서 KK는 최소 이동 횟수이다.
  • 둘 다 불가능하면 Loss in K knight move(s).을 출력한다. 여기서 KK는 폰이 맨 윗줄에 도달하기 전까지 나이트가 움직이는 횟수이다.

예제1

  1. 예제 1

    입력
    3
    99
    99
    33
    33
    33
    35
    3
    3
    1
    1
    2
    3
    99
    99
    96
    23
    99
    1
    
    예상 출력
    Win in 1 knight move(s).
    Stalemate in 1 knight move(s).
    Loss in 2 knight move(s).