我想证明这两个矩阵具有映射:
a:{{0 2 3 1},{2 0 3 1},{3 3 0 4},{1 1 1 4 0}}} B:{{0 4 3 3},{4 0 1 1},{3 1 0 2},{3 1 2 0}}}
您可以通过互换行和列来看到我可以从第一个获得第二个矩阵,但我没有如何在Java或c中对此进行编码。请帮助我。矩阵分别为二维阵列A [4] [4]和B [4] [4]。
解析第一个矩阵并将结果存储在地图中。在地图中。键可以是矩阵中的排序行,值应该是相应键的发生计数。因此,对于矩阵A,结果映射应为{[0 1 2 3] -> 2,[0 1 1 4] -> 1,[0 3 3 4] -> 1}
然后,您可以1)解析第二矩阵并以相同方式将结果存储在另一个地图中,然后比较两个地图。或
2)对于B中的每个排序行,在地图中找到与A相对应的键值对,并将该密钥的值降低1。如果某些键不在地图中,或者某些值降低至 - 1,返回false;否则在b。
中检查每一行后返回true编辑:
public static boolean matrixEqual(int[][] a, int[][] b) {
Map<Integer[], Integer> m = new HashMap<Integer[], Integer>();
int sizeA = a.length;
// maybe compare sizeA and sizeB here
for (int i = 0; i < sizeA; i++) {
// int[] temp = sorted a[i];
// if (temp not a key in m) m.put(temp, 1);
// else m.put(temp, previousvalue + 1);
}
int sizeB = b.length;
for (int i = 0; i < sizeB; i++) {
// int[] temp = sorted b[i];
// if (temp not a key in m) return false;
// else if (m.get(temp) == 0) return false;
// else m.put(temp, previousvalue - 1);
}
return true;
}