在Boggle板上查找单词的算法

时间:2009-08-06 03:03:28

标签: vb.net algorithm boggle

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

我想要它做的是,当我输入这个词时,它会使用突出显示它的button(x,y).doclick子突出显示在棋盘上。现在我的实现找到第一个字母,然后继续尝试每个字母,直到它满足8角条件(即它与最后一个相邻),但这并不总是有效。如果板上有2个“G”,我想要底部,这将不起作用。有人能给我一个关于需要发生什么的伪代码的例子。我已经被困了将近6个小时试图解决这个问题。谢谢

1 个答案:

答案 0 :(得分:2)

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

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

我恐怕不知道怎么写vb代码。因为你要求伪代码,所以这里有一些粗略的python类伪代码。我正在将boggle网格编码为16个项目的列表。邻居(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(回答,“o”)并获取网格中表示“go”的路径列表。再次强调第一个。