一种创建拼图的快速算法

时间:2011-06-13 15:37:21

标签: algorithm

我在http://www.puzzles.ca/wordsearch/transportation.html找到了一个拼图,其中一个人必须在网格中找到单词,并且他可以从8个方向读取单词。我想到了以下问题:

我们得到了一套词。找到一个算法,将这些单词放在n x m网格中,并给出nm。有没有人建议算法创建合适的网格,因为如果网格的大小只是足以使字母符合网格并且单词重叠,那么问题似乎很难?

1 个答案:

答案 0 :(得分:5)

此SO问题中也描述了一种算法

https://stackoverflow.com/a/23435654/3591273

希望这有帮助

更新:算法摘要(如前一个链接所示)

  1. 从网格中随机选择要填充的第一个空字槽,并用合适的字填充

  2. 查找所有与已填充的字样交叉点的空单词

  3. 按约束比例对其进行排序(例如每个可用解决方案的数量)

  4. 循环上一步的空槽并尝试一些候选词(来自可用词)

  5. 选择单词时间和要填充的单词保留网格一致性(即网格在此单词插槽填充此单词后有解决方案),并且下一步中的解决方案数量最大(这可以最小化bactracks in接下来的步骤)并转到第2步

  6. 如果在上一步中找不到任何单词,请尝试回溯到上一个单词并使用替代候选人(除非可用的候选人已用尽)

  7. 可选择重置在回溯后可能需要重置的任何字槽(即再次将其标记为空)并转到步骤2

  8. 如果没有找到回溯,那么此配置没有解决方案

  9. 如果所有空插槽都已填满,则您有一个解决方案