我有一个填字游戏网格,例如
+-----+
| * |
| |
+-----+
和单词列表
a
ababa
bb
cc
ba
bb
ca
cb
必须使用每个字。目标是找到所有变体如何解决这个填字游戏,在这种情况下有两种变体 -
bb*cc
ababa
和
cc*bb
ababa
一些更复杂的填字游戏就像这样:
+-----+
| * |
| |
| *|
| * |
| * *|
| * |
| |
+-----+
列出20个单词等。
我试图创建算法来解决这类问题,但没有成功。有人能帮助我吗?
答案 0 :(得分:0)
首先要注意的是,即使使用给定字典确定填字游戏是否“可解决”,NP-Hard 1 ,所以即使确定是否有0或更多解决方案也不能多项式完成( unless P=NP)。
因此,替代方案是使用exhaustive search解决方案 - 只需尝试所有可能“放置”单词,然后验证此解决方案是否有效。
伪码:
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)参考:Is P equal to NP第3.3节