题目描述
有两个 n×n 的方阵 A,B ,其中每一行每一列都恰好包含了 1~n 。
现在你可以交换 A 的任意两行或两列,问经过若干次操作之后,能否将 A 变成 B?如果可以输出最少的操作次数,否则输出 -1 。
输入
第一行输入一个正整数 n 。
接下来 n 行,每行 n 个元素,表示方阵 A 。
接下来 n 行,每行 n 个元素,表示方阵 B 。
输出
输出一个整数,表示答案。
样例输入
4
1 4 2 3
4 2 3 1
2 3 1 4
3 1 4 2
2 4 1 3
4 1 3 2
1 3 2 4
3 2 4 1
样例输出
2
代码
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
int A[400][400],B[400][400],n,inf = 1e9,x[400],y[400],a[400],C[400][400],where[400],D[400][400],whereB[400],pd[