vb.net - 在 Boggle board 上查找单词的算法

标签 vb.net algorithm boggle

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

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

最佳答案

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

给定字符串 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”的路径列表。再次突出显示第一个。

关于vb.net - 在 Boggle board 上查找单词的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1236772/

相关文章:

vb.net - 如何使用Backgroundworker加载表单?

arrays - 按组保留数组的前 N ​​个元素

c++ - vector 不更新外部函数 C++

arrays - 如何找到数组中非递减子序列的数量?

algorithm - Boggle - 计算 N*N 网格上的所有可能路径。表现

java - 调试递归方法来查找单词是否存在于滑板中

VB.NET在继续读取/写入之前检查文件是否打开?

VB.NET bool 值没有在循环中获取其默认值吗?

asp.net - VB.Net 中的 XPath 表达式 - 如何搜索包含 unicode 字符的 xml 文档

ruby - Ruby 中用于 "String#include?"的算法