也许您可以使用一些哈希函数来识别配置。由于即使模式不在棋盘上的同一位置,您也需要识别模式,因此此哈希不应取决于单元格的位置,而应取决于它们的组织方式。
如果您将 2D 网格存储在 1D 数组中,则需要找到第一个填充的单元格并从这里开始计算哈希,直到最后一个填充的单元格。
前任:
-----------------
| | | | |
-----------------
| | X | X | |
-----------------
| | | X | |
-----------------
| | | | |
-----------------
----------------+---------------+---------------+----------------
| | | | | | X | X | | | | X | | | | | |
----------------+---------------+---------------+----------------
|_______________________|
|
Compute hash based on this part of the array
但是,在某些情况下这不起作用,例如当模式跨行移动时:
-----------------
| | | | X |
-----------------
| X | | | |
----------------- Different configuration in 2D.
| X | | | |
-----------------
| | | | |
-----------------
----------------+---------------+---------------+----------------
| | | | X | X | | | | X | | | | | | | |
----------------+---------------+---------------+----------------
|_______________________|
Seems similar in 1D
所以你需要一些方法来处理这些情况。我还没有任何解决方案,但如果我的日程安排允许,我会尝试找到一些东西!
在考虑了一下之后,也许您可以对网格使用两种不同的表示形式:一种是将线附加到一维数组中,另一种是将列附加到一维数组中。哈希将使用这两种表示来计算,这将(我认为)解决上述问题。