만드는 중입니다

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

슈퍼나이트

면접 대비

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

요약
차단된 칸이 있는 체스판에서 나이트가 슈퍼무브를 한 번만 쓸 수 있을 때, 목적지까지의 최소 이동 횟수와 경로를 구합니다.
난이도

보통10점 중 4점

유형
BFS, 그래프, 행렬
정답자
아직 제출이 없습니다

문제

슈퍼나이트는 체스판의 어떤 칸에 놓여 있으며, 가능한 한 적은 이동 횟수로 다른 칸에 도달하려고 한다. 일부 칸은 막혀 있다. 나이트는 그 칸을 뛰어넘을 수는 있지만, 그 칸에 도착할 수는 없다.

일반 나이트는 한 번의 이동에서 두 행과 한 열, 또는 두 열과 한 행만큼 움직인다(왼쪽 그림). 막힌 칸은 뛰어넘을 수 있지만 그 칸에 도착할 수는 없다(가운데 그림).

슈퍼나이트는 일반 나이트와 한 가지 점에서 다르다. 경로 중에 슈퍼무브를 최대 한 번 할 수 있다. 슈퍼무브는 세 행과 한 열, 또는 세 열과 한 행만큼 움직인다(오른쪽 그림). 주어진 출발 칸에서 목적 칸까지 최소 이동 횟수로 가는 경로를 찾는 프로그램을 작성하시오.

입력

첫 줄에 보드의 행 수 RR과 열 수 VV가 주어진다(3≤R≤1003 \le R \le 100, 3≤V≤1003 \le V \le 100). 이어지는 RR개의 줄에는 각각 정확히 VV개의 문자가 주어진다. '@'는 나이트의 출발 칸, '*'는 목적 칸, '.'은 빈 칸, '#'은 막힌 칸을 뜻한다.

출력

첫 줄에 최소 이동 횟수 KK를 출력한다. 이어지는 K+1K + 1개의 줄에는 나이트가 방문하는 칸의 행 번호 rir_i와 열 번호 viv_i를 방문 순서대로 출력한다. 행은 위에서 아래로 1…R1 \ldots R, 열은 왼쪽에서 오른쪽으로 1…V1 \ldots V 번호를 매긴다. 모든 테스트 케이스에서 목적 칸에 도달할 수 있다고 가정해도 된다. 최소 이동 횟수의 경로가 여러 개라면 그중 아무거나 출력하면 된다.

예제1

  1. 예제 1

    입력
    4 5
    *....
    .....
    ..#..
    @....
    
    예상 출력
    4
    4 1
    2 2
    4 3
    2 4
    1 1