小编典典

生成填字游戏的算法

algorithm

给定单词列表,您将如何将它们排列为填字游戏网格?

它不必像对称的或类似的“正确的”填字游戏一样:基本上只是输出每个单词的起始位置和方向。


阅读 768

收藏
2020-07-28

共1个答案

小编典典

我想出了一个可能不是最有效的解决方案,但是它足够好用。基本上:

  1. 按长度排序所有单词,降序排列。
  2. 选择第一个单词并将其放在板上。
  3. 下一个词。
  4. 搜索黑板上已经存在的所有单词,并查看该单词是否存在任何可能的交集(任何常见字母)。
  5. 如果该单词可能存在,请遍历板上所有单词,然后检查新单词是否有干扰。
  6. 如果该单词没有破坏木板,则将其放在那儿,然后转到步骤3,否则,继续寻找位置(步骤4)。
  7. 继续此循环,直到所有单词都被放置或无法放置。

这使一个工作正常但通常很差的填字游戏。我对上面的基本配方进行了许多更改,以得出更好的结果。

  • 在生成填字游戏的最后,根据放置的单词数(越多越好),木板的大小(越小越好)以及高度和宽度之间的比率(越近)为其打分。到1更好)。生成多个填字游戏,然后比较它们的得分并选择最佳的一个。
    • 我决定不运行任意数量的迭代,而是决定在任意时间内创建尽可能多的填字游戏。如果您只有一个很小的单词列表,那么您将在5秒钟内得到数十个可能的填字游戏。较大的填字游戏只能从5-6种可能性中选择。
  • 当放置一个新单词时,与其在找到可接受的位置后立即放置它,不如根据它增加网格大小和相交的数量给该单词位置打分(理想情况下,您希望每个单词都是越过2-3个其他字词)。跟踪所有位置及其得分,然后选择最佳位置。
2020-07-28