고키겐 나나메

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

요약
n×n 격자의 각 칸에 대각선을 하나씩 그어, 숫자가 적힌 격자점마다 대각선 끝점 수가 그 숫자와 같게 맞추고 대각선이 닫힌 고리를 이루지 않도록 한다.
난이도

보통10점 중 7점

유형
백트래킹, DFS, 유니온 파인드, 구현
정답자
아직 제출이 없습니다

문제

Gokigen Naname는 일본에서 유래한 격자 퍼즐이다. 게임판은 n×nn \times n개의 정사각형 칸으로 이루어져 있고, 칸의 꼭짓점이 되는 (n+1)×(n+1)(n+1) \times (n+1)개의 교차점 중 일부에는 숫자가 적힌 동그라미가 있다.

각 칸에는 대각선을 정확히 하나씩 그어야 한다. 대각선은 칸의 왼쪽 위 꼭짓점과 오른쪽 아래 꼭짓점을 잇는 \ 이거나, 오른쪽 위 꼭짓점과 왼쪽 아래 꼭짓점을 잇는 / 둘 중 하나다.

모든 칸에 대각선을 그은 뒤, 숫자가 적힌 모든 동그라미에 대해 그 교차점에 끝점이 닿는 대각선의 개수가 동그라미 안의 숫자와 정확히 같아야 한다. 또한 대각선들이 이어져 닫힌 고리(루프)를 만들면 안 된다.

퍼즐이 주어졌을 때 이 조건을 모두 만족하는 배치를 출력하는 프로그램을 작성하시오. 답이 유일한 경우만 입력으로 주어진다.

입력

첫째 줄에 격자 한 변에 있는 칸의 개수 nn이 주어진다. (2≤n≤72 \le n \le 7)

다음 n+1n+1개의 줄에는 교차점 정보가 위에서 아래로 한 줄씩 주어지며, 각 줄은 정확히 n+1n+1개의 문자로 이루어진다. 각 문자가 숫자이면 그 교차점에 닿아야 하는 대각선의 개수를 나타내고, .이면 그 교차점에는 숫자가 없다는 뜻이다.

출력

퍼즐을 푼 결과를 nn개의 줄로 출력한다. rr번째 줄은 nn개의 문자로 이루어지며, cc번째 문자는 rr행 cc열 칸에 그은 대각선을 나타내는 / 또는 \이다. 답은 항상 유일하다.

예제3

  1. 예제 1

    입력
    3
    1.1.
    ...0
    .3..
    ..2.
    
    예상 출력
    \//
    \\\
    /\/
    
  2. 예제 2

    입력
    5
    .21...
    ..33.0
    ......
    ..33..
    0..33.
    ....11
    
    예상 출력
    /\\//
    //\\\
    \\\//
    \/\\/
    ///\\
    
  3. 예제 3

    입력
    2
    101
    121
    020
    
    예상 출력
    \/
    \/