동전 미로
시간 제한1초메모리 제한512 MB
주어진 n, m, k마다 지정된 두 경우에는 정해진 미로를, 그 외에는 (1,1)에 기지, 코인을 행 우선 순서로 배치한 벽 없는 격자를 출력한다.
문제
Uolevi는 미로에서 동전을 모으는 게임을 만들었다. 지금은 게임이 너무 쉽다. 미로를 직접 만들어야 한다.
미로는 세로 칸, 가로 칸인 격자이다. 각 칸은 바닥(.)이거나 벽(#)이다. 칸 하나에는 기지(x)가 있고, 정확히 개의 칸에는 동전(o)이 있다.
플레이어는 기지에서 시작한다. 상하좌우로 한 칸씩 이동하며 벽으로는 가지 못한다. 모든 동전을 모은 다음 기지로 돌아와야 한다. 그런 경로가 있으면 그 미로는 풀 수 있다.
같은 , , 로 풀 수 있는 미로는 여러 개일 수 있다. 아래 규칙으로 정한 미로만 출력한다.
이면 다음 미로를 출력한다.
###
#.x
#o#
이면 다음 미로를 출력한다.
.o.####
.#..x.#
...##.#
###o...
그 밖의 에서는 다음을 따른다.
- 모든 칸을
.으로 채운다. - 왼쪽 위 칸(1행 1열)에
x를 둔다. - 기지를 건너뛰고, 행 우선 순서(각 행은 왼쪽에서 오른쪽, 행은 위에서 아래)로 다음 개의 칸에
o를 둔다.
이 격자에는 벽이 없으므로 플레이어는 모든 동전에 도달한 뒤 기지로 돌아올 수 있다.
입력
첫째 줄에 정수 가 주어진다. 만들어야 할 미로의 개수이다.
다음 개 줄 각각에 정수 , , 가 주어진다. 미로 크기는 이고 동전은 정확히 개이다.
- ,
출력
입력과 같은 순서로 미로 개를 출력한다. 이웃한 두 미로 사이에는 빈 줄을 하나 둔다.
각 미로는 줄이고, 각 줄은 길이 인 문자열이다. 문자는 #, ., o, x 중 하나이다. 기지는 정확히 하나이고 동전은 정확히 개여야 한다. 미로는 풀 수 있어야 한다.
힌트
미로에서 플레이어는 기지에서 왼쪽으로 한 칸, 아래로 한 칸 가서 동전을 줍고 같은 길로 돌아온다. 이동 횟수는 4이다.
미로에서 두 동전을 모두 모으고 기지로 돌아오는 최단 경로의 길이는 18이다.
일반 규칙으로 만든 미로는 모든 칸이 바닥이므로 항상 풀 수 있다.