时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld
题目描述
在遥远的德邦草原,有一个古老的国度。
这里的国王有一种特殊的能力,他可以在限定次数内互换自己和某些子民的位置
现在国王需要让自己的子民排列成一个整齐的方阵接受检阅,但是他们的动作太慢了
于是国王决定用自己的能力来完成剩余的排列,从而将自己的子民排列
成能让他满意的样子。
请你帮忙计算国王最少需要瞬间移动多少次,才能将方阵变成他想要的样子。
注意国王不得移动出方阵,国王的瞬间移动方式将由输入数据给出。
输出描述
输入描述:
N K M分别表示矩阵的大小、国王的瞬移方法数量和国王的瞬间移动限定次数
接下来 K 行 Xi Yi 表示国王可以让自己和 (X + Xi, Y + Yi)上的子民位置互换
其中 X Y 表示国王当前的位置
接下来 N 行为一个矩阵,表示当前的矩阵排列
接下来 N 行为一个矩阵,表示能让国王满意的矩阵排列
矩阵仅由(0, 1, 2)组成,其中 0 表示女性子民,1 表示男性子民, 2 表示国王
1 <= N <= 5
1 <= K <= 8
1 <= M <= 15
输出描述:
如果国王可以在限定次数内将矩阵变成他喜欢的样子,请你输出最小次数
反之,请你输出 -1
示例1
输入
复制
3 2 1
1 -1
1 1
1 0 0
0 1 2
0 1 1
1 0 0
0 1 1
0 2 1
说明
位于坐标(2, 3)的国王和位于坐标(3, 2)的男性子民
互换位置从而使得方阵变成了他喜欢的样子
示例2
输入
复制
3 1 1
-1 0
1 0 0
0 1 2
0 1 1
1 0 0
0 1 1
0 2 1
说明
此时国王只能往上移动,所以无法将方阵变成他喜欢的样子