맨하탄 배선

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

요약
장애물이 있는 격자에서 두 쌍의 표시된 셀을 잇는 두 개의 서로 겹치지 않는 경로를 찾아 길이 합을 최소화하고, 불가능하면 0을 출력합니다.
난이도

어려움10점 중 8점

유형
그래프, BFS, 완전 탐색
정답자
아직 제출이 없습니다

문제

n×mn \times m 칸으로 이루어진 직사각형 격자가 있다. 이 중 정확히 두 칸은 "2", 다른 두 칸은 "3"으로 표시되어 있으며, 일부 칸은 장애물이다.

두 개의 "2" 칸을 하나의 선으로 잇고, 두 개의 "3" 칸을 또 다른 선으로 이으려고 한다. 선은 장애물이 아닌 칸의 중심을 지나며, 상하좌우로 이웃한 두 칸 사이를 가로 또는 세로로만 연결한다.

규칙은 다음과 같다.

  • 선은 장애물 칸을 지날 수 없다.
  • 한 칸은 최대 하나의 선만 지날 수 있다. 따라서 두 선은 같은 칸을 공유할 수 없고, 서로 교차하지 않는다.
  • 선의 길이는 선이 가로지르는 칸 경계의 개수이다. 즉, 경계를 공유하는 이웃한 두 칸을 이은 선의 길이는 11이다.

두 선의 길이의 합이 최소가 되도록 할 때, 그 최솟값을 구한다. 두 쌍을 모두 규칙에 맞게 이을 수 없다면 답은 00이다.

예를 들어, 아래 첫 번째 예제의 첫 격자에서는 두 쌍을 모두 이었을 때 두 선의 길이의 합을 최소 1818로 만들 수 있다.

입력

첫째 줄에 데이터 세트의 개수 TT가 주어진다.

각 데이터 세트의 첫째 줄에는 행의 개수 nn과 열의 개수 mm이 주어진다. (2≤n≤92 \le n \le 9, 2≤m≤92 \le m \le 9)

다음 nn개의 줄에는 격자의 각 행이 위에서 아래로 주어지며, 한 줄에 mm개의 정수가 공백으로 구분되어 주어진다. 각 정수의 의미는 다음과 같다.

  • 00: 빈 칸
  • 11: 장애물
  • 22: "2"로 표시된 칸
  • 33: "3"으로 표시된 칸

각 격자에는 "2"로 표시된 칸이 정확히 두 개, "3"으로 표시된 칸이 정확히 두 개 있다.

출력

각 데이터 세트마다 두 선의 길이의 합의 최솟값을 한 줄에 하나씩 출력한다. 두 쌍을 모두 이을 수 없으면 00을 출력한다.

예제1

  1. 예제 1

    입력
    7
    5 5
    0 0 0 0 0
    0 0 0 3 0
    2 0 2 0 0
    1 0 1 1 1
    0 0 0 0 3
    2 3
    2 2 0
    0 3 3
    6 5
    2 0 0 0 0
    0 3 0 0 0
    0 0 0 0 0
    1 1 1 0 0
    0 0 0 0 0
    0 0 2 3 0
    5 9
    0 0 0 0 0 0 0 0 0
    0 0 0 0 3 0 0 0 0
    0 2 0 0 0 0 0 2 0
    0 0 0 0 3 0 0 0 0
    0 0 0 0 0 0 0 0 0
    9 9
    3 0 0 0 0 0 0 0 2
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    2 0 0 0 0 0 0 0 3
    9 9
    0 0 0 1 0 0 0 0 0
    0 2 0 1 0 0 0 0 3
    0 0 0 1 0 0 0 0 2
    0 0 0 1 0 0 0 0 3
    0 0 0 1 1 1 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    9 9
    0 0 0 0 0 0 0 0 0
    0 3 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 2 3 2
    
    예상 출력
    18
    2
    17
    12
    0
    52
    43