您如何找到两个二维阵列(或矩阵)是相同的?(只有您可以进行换行操作或交换列操作)



我想证明这两个矩阵具有映射:

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;
}

相关内容

最新更新