亲爱的stackoverflowers。
所以,假设有一个网格,其在某个 x 和 y 处的值表示那里是否有一个图块 (1) 或它缺失 (0)。
例如,
100110100010
100100111110
111110000000
000010000000
还有一些已知的形状 A、B 和 C,例如,
(A) (B) (C)
1 1 1
111, 111, 11
所以我想要实现的是识别网格上的哪个 1 属于哪个形状。所有的 1 都应该用完,形状的确切数量是已知的,但允许旋转(无镜像),所以我想最好添加旋转版本并认为在网格上找不到某些形状。
因此,预期的结果将是(众所周知,它应该正好是 1xA、2xB、2xC):
A00CC0B000C0
A00C00BBBCC0
AABBB0000000
0000B0000000
如果有几种可能的匹配,任何一种都适合,只要每个图块都分配到它自己的形状。
此外,找出一个图块是否存在(“发现”)是一项昂贵的操作(但结果被缓存,图块不会突然出现),所以我实际上正在寻找一种方法来最小化它们尽可能多的“发现”。(如果它不是最佳的也没关系,只是识别形状会很棒)。
显然,一组已知形状可能会改变(但它会在实施时被知道并且它将保持不变,因此可以为一组特定的图块调整代码或开发一些搜索策略),但它不会很大(~5-6),网格也很小(~15x15)。
谢谢!