用给定的网格和单词交叉单词



我有一个填字游戏网格,例如

+-----+
|  *  |
|     |
+-----+

和单词列表

a
ababa
bb
cc
ba
bb
ca
cb

每个单词都必须使用。目标是找到如何解决这个填字游戏的所有变体,在这种情况下有两种变体-

bb*cc
ababa

cc*bb
ababa

一些更复杂的填字游戏看起来是这样的,例如:

+-----+
|   * |
|     |
|    *|
|   * |
|  * *|
|  *  |
|     |
+-----+

带有20个单词的列表等

我试图创建算法来解决这类问题,但没有成功。有人能帮我吗?

首先要注意的是,即使使用给定的字典来确定填字游戏是否"可解"也是NP难的1,因此即使确定是否有0或更多的解也不能用多项式来完成(除非p=NP)。

因此,另一种选择是使用详尽的搜索解决方案——只需尝试所有可能性来"放置"单词,然后验证该解决方案是否有效。

伪代码:

solve(words,grid):
if words is empty:
if grid.isValidSolution():
print grid as a possible solution
return
for each word in words:
candidate<- grid.fillFirstSpace(word)
solve(words{word},candidate)

(1)参考:p是否等于NP第3.3节

最新更新