填字游戏的逻辑

时间:2010-06-20 18:45:10

标签: java algorithm crossword

我有一项任务是创建一个特定的填字游戏。给出了所有的答案,但他们的位置是未知的。程序必须读取带有这样的电路板方案的文件:

0 1 0 0 0 0 0 0 1 0 0
0 1 0 1 1 1 1 1 1 1 1
0 1 0 1 0 0 1 0 1 0 1
0 S 1 1 0 1 1 1 1 0 1
0 1 0 0 1 0 1 0 1 0 0
1 1 1 1 1 1 1 S 1 1 0
0 0 0 0 1 0 1 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0

将每列/每行作为一个可能的答案处理。有没有办法解析这个文件并标记答案而不使用gazilion if每个字段? 其余逻辑如下:
- 在解析文件的基础上创建填字游戏 - 用户从可能性列表中选择答案 - 用户点击第一个答案块,如果所选答案的长度和字母和答案匹配 - 字段已更新

我认为游戏板应该存储在2d数组中,并且每个Answer应该包含字段索引吗?

1 个答案:

答案 0 :(得分:3)

填字游戏构造通常是NP-Complete(即1x和0s的nxn板以及从中挑选答案的给定集合)。看看:http://en.wikipedia.org/wiki/List_of_NP-complete_problems刚刚提到这一点。 Garey和Johnson的经典书也提到了这一点,说3套精确封面可以减少到它。

所以,你可能不得不使用一些回溯/启发式来填充网格。

也许这个来自达特茅斯学院的两名学生的项目报告会有所帮助:Crossword Puzzle Generator。它包含一些您可以使用的启发式方法。

当然,你似乎暗示有一个人参与,但目前尚不清楚你是否可以利用这个人来填补网格,以及你的问题是否基本上是帮助用户解决的一些UI编程问题。