这样的问题在我的大学给了我,也许有人会有一个有趣的算法如何解决这个问题。在stackoverflow上有几种解决方案,但没有一个是可以的(因为他们正在循环所有可能性)。帮助填字游戏算法
问题:查找所有可能的组合给给定的表格,网格(矩形,见下面的输入)给定的单词。应该没有空闲单元,单词可以从左到右或从上到下。单词不能位于连续(列)字中。
输入:矩形区域,例如:
+-----+
| * |
| |
+-----+
或
+-----+
| * |
| |
| *|
| * |
+-----+
不同字被输入随后后(下一个输入数据)来填充该网格如:
cdi
zobxzst
tdxic
r
sc
zro
and etc ...
数字最初是未知的,但输入直到标准输入 - 活动EOF结束。
输出:如果存在一个解决方案,则在填充的网格内输出该可能的解决方案。 如果没有解决方案或解决方案的数量,则输出0或确切的数字。
实施例:
(表输入)
+-----+
| * |
| |
| *|
| * |
| * *|
| * |
| |
+-----+
然后词语cdi zobxzst tdxic r sc zro rgfvacd oikf df x c r xvf ogish za sh fc hh h bfkh
(每个作为输入,但在这里,由空格分开的)(仅1种溶液)
输出:
+-----+
|zro*h|
|ogish|
|bfkh*|
|xvf*r|
|za*c*|
|sc*df|
|tdxic|
+-----+
重要提示:输入的网格仅受16(!)个单元限制,单词数量少于60个。我编写了一个算法,搜索所有可能的组合,但由于执行时间有限,到10秒我猜),这个问题不能用粗略的算法解决(例如, 15格15格,约60!可能或更多可能的排列,可以处理大约1天?在普通的2GHz PC上)。
也许还有另一种独特的解决方案。也许这个问题在编程时更具数学意义,也许可以使用一些左上角的组合,而不是上下?或者也许加权单元格?
P.S.我有3周的时间来解决这个问题,如果没有,我可以在3周后发布解决方案(好消息);)
你正在使用的这些“单词”,“cdi”,“zobxzst”,“tdxic”,我不认为它们表示你认为它们的意思。 :) –
'*'做什么? – luiges90
@JamesKolpack不可思议! –