【问题标题】:Algorithm to find word on Boggle board在 Boggle 板上查找单词的算法
【发布时间】:2009-08-06 03:03:27
【问题描述】:

我正在 vb .net 中构建一个 boggle 游戏。现在,我的骰子是二维数组 (0,0 0,1 ) 等...

我想要它做的是,当我输入这个词时,它会使用突出显示它的button(x,y).doclick sub 在板上突出显示它。现在我的实现找到了第一个字母,然后继续尝试每个字母,直到它满足 8 个角条件(即它与最后一个相邻),但这并不总是有效。如果板上有 2 个“G”,而我想要底部的一个,这将行不通。有人可以给我一个需要发生什么的伪代码示例。我已经被难住了将近 6 个小时试图弄清楚这一点。谢谢

【问题讨论】:

    标签: vb.net algorithm boggle


    【解决方案1】:

    如果我理解正确,给定一个字符串,您想突出显示与该字符串匹配的骰子的一条路径。有时有几种可能的选择,因此添加一个字母可能会完全改变突出显示的内容。在这里保留前一个子字符串的结果可能是一个好方法,所以我们不必重新开始。那么一个合理的做法是计算所有可能的路径。

    给定字符串 s 的答案是路径列表,其中路径是网格坐标列表。每条路径都是您可以合理突出显示的内容,因此您只需突出显示第一个路径。向字符串添加字母时,您会找到可以扩展的路径并删除无法扩展的路径。

    恐怕我不会写vb代码。由于您要求提供伪代码,因此这里有一些类似 Python 的粗略伪代码。我将 boggle 网格编码为 16 个项目的列表。 neighbors(x) 函数返回相邻位置的列表(边缘情况除外,即 [x-1, x+1, x-4, x+4])。

    def firstLetter(typed):
      answer = []
      for pos in range(16): if grid[pos]==typed: answer += [pos]
      return answer
    
    def addletter(partialanswer, typed):
      answer2 = []
      for partial in partialanswer:
          for neighbor in neighbors(partial[-1]):
              if grid[neighbor]==typed: 
                 # partial+[neighbor] is a list. answer2 is a list of such lists.
                 answer2 += partial + [neighbor]
      return answer2
    

    例如,如果玩家输入“go”,那么 (a) 玩家键入“g”,代码调用 firstletter(“g”) 并获取网格中包含“g”的位置的列表“答案”。突出显示,比如说,第一个。 (b) 玩家键入“o”,代码调用 addletter(answer, "o") 并获取网格中显示“go”的路径列表。再次突出显示第一个。

    【讨论】:

    • @user146780 很高兴我能帮上忙!
    猜你喜欢
    • 2017-12-30
    • 2018-12-20
    • 1970-01-01
    • 2016-03-24
    • 2021-07-05
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    • 2019-10-14
    相关资源
    最近更新 更多