哪种算法最适合用Python解决像“Boggle”这样的单词搜索游戏

时间:2013-01-07 07:49:39

标签: python algorithm boggle

我正在编写一个类似于Boggle的游戏,游戏玩家应该在随机字母组成的大字符串中找到单词。

例如,有五个数组,其中包含像这样的字符串。五行,每行六个字母:

AMSDNS
MASDOM
ASDAAS
DSMMMS
OAKSDO

因此,游戏的用户应该使用可用的字母,并考虑以下限制和规则:

  • 不可能重复相同的字母来表达一个字。我正在谈论骰子游戏中的“实体”字母。它不可能使用相同的骰子两次或更多来制作这个词。
  • 不可能“跳”任何一个字来形成一个字。制作单词的字母必须是连续的。
  • 用户可以向她想要的任何方向移动,而不受上述两者的限制。所以它可以到达顶部,然后是底部,然后到右边,然后再到顶部,依此类推。所以寻找单词的动作可能会有些不稳定。

我想知道如何通过所有字符串来制作单词。要知道我将使用带有单词的txt文件的单词。

我不知道如何设计能够执行搜索的算法,特别是考虑找到单词和尊重限制所需的不稳定运动。

我已经实现了用户体验,投掷骰子和填充棋盘游戏的逻辑,以及六个字母骰子的所有逻辑。

但这部分并不容易,我想阅读你对这个有趣挑战的建议。

我在这个游戏中使用Python是因为我使用的语言代码和我最喜欢的语言。但是算法本身的解释或建议也应该很好,与语言无关。

1 个答案:

答案 0 :(得分:4)

您可能会发现Trie有用 - 将所有词典单词放入Trie,然后从Boggle网格中制作另一个Trie,只要您与词典Trie匹配。

即。字典特里:

S->T->A->C->K = stack
      \->R->K = stark
         \->T = start

网格:(简化)

STARKX 
XXXTXX 
XXXXXX

网格特里:(仅显示从S开始 - 也从A开始用于ART等)

S->X (no matches in dict Trie, so it stops) 
\->T->X
   \->A-R->K (match)
      | |->T (match)
      | \->X  
      \->C->K (match)
         \->X    

您可以使用GraphViz(例如this)来显示您的尝试。