我正在研究一个搜索算法项目,寻找 16 谜题的解决方案。
我有两个包含二维数组的结构列表 board[N][N]
列表中的数字在 0-15 范围内是唯一的,区别在于它们的顺序。
BoardA = 0 1 2 3 BoardB = 4 1 2 3
4 5 6 7 0 5 6 7
8 9 10 11 8 9 10 11
12 13 14 15 12 13 14 15
如您所见,图板之间的唯一区别是数字的顺序。 显然,可以遍历每个板检查是否
BoardA[i][j] == BoardB[i][j]
但是,如果列表中有数百或数千个板,则不希望以这种方式进行比较。
有没有办法快速或有效地比较两个板的相同性?
最佳答案
二维数组的元素位于一个连续的内存块中。所以要比较两个数组,你只是在比较两个内存块。最快的方法是使用 memcmp()
。您没有指定每个数组元素的类型,所以我将使用 int
,如果您的元素不是 int
,您可以将其替换为其他类型。
if (memcmp(BoardA, BoardB, sizeof(int) * N * N) == 0) {
/* equal */
} else {
not /* equal */
}
关于c - 在 C 中快速/高效地识别两个二维数组的相同性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47024532/