만드는 중입니다

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

좋은 격자

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

요약
N×N 격자에 1부터 N²까지 서로 다른 수가 적혀 있습니다. 행과 열을 맞바꿔 1부터 N²까지의 수가 인접한 칸을 차례로 이어 가도록 만드는 최소 횟수를 구하고, 불가능하면 -1을 출력합니다.
난이도

보통10점 중 7점

유형
행렬, 구현, 완전 탐색
정답자
아직 제출이 없습니다

문제

N×NN \times N 크기의 격자가 주어진다. 격자의 각 칸에는 11 이상 N×NN \times N 이하의 서로 다른 정수가 하나씩 적혀 있다. 격자에서 11이 적힌 칸부터 시작해 상하좌우로 한 칸씩 이동하며 11부터 N×NN \times N까지의 수를 순서대로 지나갈 수 있으면 그 격자를 '좋은 격자'라고 한다. 주어진 격자에 다음 시행을 원하는 만큼 할 수 있다.

  • 서로 다른 두 행을 골라 교환하거나 서로 다른 두 열을 골라 교환한다.

시행을 통해 주어진 격자를 좋은 격자로 만들 수 있는지 판별하고, 가능하다면 좋은 격자로 만들기 위해 필요한 시행의 최소 횟수를 구하시오.

입력

첫째 줄에 격자의 크기를 나타내는 정수 NN (2≤N≤1 0002 \leq N \leq 1\ 000)이 주어진다. 다음 NN줄에는 정수가 NN개씩 공백으로 구분되어 주어진다. y+1y+1번째 줄의 xx번째 수는 격자의 yy행 xx열에 적힌 수를 나타낸다. 이 수들은 11 이상 N×NN \times N 이하의 서로 다른 정수임이 보장된다.

출력

시행을 통해 주어진 격자를 좋은 격자로 만드는 데 필요한 최소 횟수를 첫째 줄에 출력한다. 좋은 격자를 만드는 것이 불가능하다면 −1-1을 출력한다.

힌트

aa행과 bb행을 교환한다는 것은 1≤i≤N1\leq i \leq N인 모든 정수 ii에 대해 aa행 ii열과 bb행 ii열의 수를 교환한다는 것이다. 비슷하게 aa열과 bb열을 교환한다는 것은 1≤i≤N1\leq i \leq N인 모든 정수 ii에 대해 ii행 aa열과 ii행 bb열의 수를 교환한다는 것이다.

예제1

  1. 예제 1

    입력
    3
    3 6 2
    4 5 1
    8 7 9
    
    예상 출력
    2