게으른 고양이
시간 제한2초메모리 제한512 MB
벽을 피해 S에서 출발해 모든 먹이를 먹고 침대까지 가는 가장 짧은 걸음 수를 구합니다.
문제
집의 지도는 격자로 주어진다. 아래는 지도의 예다.
벽은 'X', 먹이는 'F', 하나뿐인 침대는 'B'로 나타낸다. 고양이는 'S' 칸에서 출발하고, 'S'는 격자 어느 칸에나 놓일 수 있다. 고양이는 상하좌우로 한 칸씩만 움직이며 'X' 칸에는 들어가지 못한다. 모든 먹이를 먹고 침대에 도착하는 데 필요한 최소 이동 횟수를 구하라.
입력
첫째 줄에 격자의 크기 이 주어진다. ()
다음 개 줄에는 각각 문자 개가 주어지고, 각 문자는 그 칸의 상태를 나타낸다. 침대는 'B', 먹이는 'F', 벽은 'X', 빈 칸은 숫자 0, 고양이가 출발하는 칸은 'S'다. 알파벳은 모두 대문자다. 'B'와 'S'는 각각 한 번씩 나오고, 'F'는 적어도 한 번, 많아야 열 번 나온다.
출력
모든 먹이를 먹은 뒤 침대에 도착하는 데 필요한 최소 이동 횟수를 한 줄에 출력한다. 모든 먹이를 먹고 침대까지 가는 방법이 없으면 대신 -1을 출력한다.