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

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

두 나이트

시간 제한2초메모리 제한1024 MB

요약
체스판에 놓인 두 나이트를 서로 같은 칸에 서지 않도록 번갈아 움직여 각자의 목표 칸으로 옮기고, 최소 이동 횟수와 실제 이동 순서를 출력하거나 불가능하면 -1을 출력한다.
난이도

어려움10점 중 8점

유형
BFS, 그래프, 최단 경로, 구현
정답자
아직 제출이 없습니다

문제

페티야는 체스를 배우고 있다. 나이트는 기물을 뛰어넘을 수 있지만, 서로가 원하는 칸에 도착하는 것을 방해할 수 있다는 사실을 최근에 알게 되었다. 페티야는 체스판 위에 검은 나이트와 흰 나이트를 하나씩 놓고, 각 나이트마다 도착시키고 싶은 칸을 하나씩 정했다. 이제 그는 두 나이트가 원하는 칸에 도착하는 데 필요한 최소 이동 횟수를 알고 싶어 한다.

나이트는 체스 규칙에 따라 움직인다(가로로 한 칸, 세로로 두 칸 또는 세로로 한 칸, 가로로 두 칸). 검은 나이트와 흰 나이트의 이동 순서는 임의로 정할 수 있다. 두 나이트가 동시에 같은 칸에 서 있는 것은 허용되지 않는다.

입력

입력 파일에는 체스판의 네 칸이 다음 순서로 주어진다: 흰 나이트의 시작 위치, 검은 나이트의 시작 위치, 흰 나이트의 도착 위치, 검은 나이트의 도착 위치. 체스판의 칸은 가로(문자 a부터 h)와 세로(숫자 1부터 8)를 공백 없이 이어서 나타낸다. 각 칸의 설명은 공백 하나로 구분한다.

처음에 두 나이트는 서로 다른 칸에 있고, 마지막에도 두 나이트는 서로 다른 칸에 있어야 한다.

출력

출력 파일의 첫째 줄에 필요한 이동 횟수를 출력한다. 이어서 이동 순서를 출력한다. 이동은 다음과 같이 나타낸다: 나이트의 색에 해당하는 문자(W는 흰색, B는 검은색)와 이동할 칸. 칸은 입력 파일과 같은 형식으로 출력한다.

원하는 이동 순서가 존재하지 않으면 출력 파일의 첫째 줄에 −1-1을 출력한다.

예제1

  1. 예제 1

    입력
    a1 a2 a2 a1
    
    예상 출력
    6
    W b3
    W c1
    B b4
    W a2
    B c2
    B a1