哪种算法将适合的最佳解决一个词搜索游戏,如“惊奇”与Python(Which algorithm w

2019-08-05 20:44发布

我编码类似游戏BOGGLE当玩家应该发现由随机字母一个大的字符串中的单词。

例如,有五个数组与字符串内是这样的。 五排,由六个字母每一个:

AMSDNS
MASDOM
ASDAAS
DSMMMS
OAKSDO

所以,游戏的用户应该使用可用时考虑以下限制和规则的字母组成单词:

  • 它不可能重复相同的字母,使一个字。 林谈论的“物理”信,在游戏中是一个骰子。 它不可能使用相同的骰子两次或更多,使这个词。
  • 它不可能“跳”任何字母作字。 这使单词的字母必须是连续的。
  • 用户能够以自己想要的任何方向继续移动,没有任何限制比上面提到的两个。 因此,它可能要到顶部,然后底部,然后在右边,然后再次顶,等等。 因此,运动寻找的话可能会莫名其妙地不稳定。

我想知道如何去通过所有的字符串进行单词。 要知道的话我也会用一个txt文件文字。

我不知道如何设计一个算法,它能够执行搜索,特别是考虑过这个问题,需要找到的话,尊重限制走势飘忽了。

我已经实施的UX,扔骰子,并填补了桌上游戏的逻辑,和所有六个字母骰子的逻辑。

但是,这部分的不容易,我想读你的建议,这一有趣的挑战。

即时通讯使用Python为这个游戏,因为是我使用的代码的语言和我最喜欢的语言。 但是一个算法本身的解释或建议,应该是很好过,独立于语言的。

Answer 1:

基本算法很简单。

  • 对于每瓦,做到以下几点。
    • 开始用空候选词,然后访问当前瓦片。
    • 通过以下步骤访问瓷砖。
      • 添加瓷砖的位置的信候选词。
      • 是候选词的已知词? 如果是这样,将其添加到发现的单词列表。
      • 是候选词的前缀任何已知的字?
        • 如果是这样,对于尚未访问过,形成候选词,访问它(即递归)各相邻瓦片。
        • 如果不是这样,原路返回(停止审批新的瓷砖这个候选词)。

为了使事情问这个问题的时候流畅的运行“是这个字词在我的字典里前缀”,考虑代表你的字典作为一个线索 。 尝试提供这两个词​​和前缀快速查找倍。



Answer 2:

您可能会发现一个特里有用-把所有词典单词到特里,然后从惊奇电网再拍特里,只是只要你匹配的词典索引树。

即字典特里:

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

格:(简化的)

STARKX 
XXXTXX 
XXXXXX

格特里结构:(仅示出从S开始 - 开始也会在一种用于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的可视化的尝试次数喜欢这样 。



文章来源: Which algorithm would fit best to solve a word-search game like “Boggle” with Python