【发布时间】:2015-02-27 05:16:17
【问题描述】:
例如,假设我们有一个有界的 2D 网格,我们希望用相同大小的方形图块覆盖该网格。我们有无限数量的瓷砖,它们属于定义数量的类型。每种类型的瓷砖都指定了印在该瓷砖上的字母。字母印在每个边缘旁边,只有在相邻边缘上具有匹配字母的瓷砖才能在网格上彼此相邻放置。瓷砖可以旋转。
鉴于网格的大小和图块类型定义,排列图块以满足上述约束并覆盖整个/大部分网格的最快方法是什么? 请注意,我的用例适用于大型网格(每个维度约 20 个)和中等数量的解决方案(与 Eternity II 不同)。
到目前为止,我已经尝试了从中心开始的 DFS,并在填充区域周围选择允许最少可能性的位置,并在没有进展的情况下回溯。这仅适用于具有一种或两种类型的简单场景。任何更多和太多的回溯随之而来。
这是一个简单的例子,显示输入和最终输出:
【问题讨论】:
-
能否介绍一下约束条件、网格大小?瓷砖类型的数量?
-
我认为所有这些都是问题的输入。尽管如果您可以正式定义输入(大小为
A*B、N类型的图块、M不同的字母、任何其他...?)那会很好。此外,瓷砖的 4 个边缘之间是否有重复,或者所有 4 个总是不同的字母? (将这些问题的任何答案添加到 OP)。 -
是的,这些实际上是输入。此外,是的,允许重复,例如,瓷砖可能在所有边缘上都有字母 v。如果它是唯一的瓷砖类型,排列它们将是微不足道的。
-
请举例说明您的问题。最好能理解并回答您的问题。
标签: algorithm search depth-first-search