寻找填字游戏中的点数

时间:2014-08-29 09:05:18

标签: arrays algorithm

我有一个填字游戏的2D数组:

0 1 2 3 4 0 t h i s q 1 m i l e u 2 a b y w i 3 n b y s c 4 l o o t k

给出一个要查找的单词列表:这个,快速,战利品,英里,按人,

目标: 在任何方向(水平,垂直,对角线)中找到拼图中的单词

输出: 是列出单词所在的所有点。 例如,这:(0,0),(0,1),(0,2),(0,3)

我在开始这方面遇到了麻烦。

1 个答案:

答案 0 :(得分:0)

像这样的东西。可能需要一些修复,但一般情况下:

find_word(x,y,word,index,inc_x,inc_y):
  if x,y is not on board return false
  if letter[x,y] != word[index] return false
  if it is last letter return true
  call find_word(x+inc_x,y+inc_y,word,index+1,inc_x,inc_y)

foreach x:
    foreach y
        foreach word
            for x_inc in -1,0,1
               for y_inc in -1,0,1
                  if x_inc + y_inc == 0 continue
                  find_word(x,y,word,0,x_inc,y_inc)

如果你想比制作一个单词树更快,你可以删除单词循环。 例如,想象你有:abc,aab,aac。

a
  a
    b
    c
  b

现在想象你找到了一封信。 拨打find_word并获取前面的字母d。在树的a中没有d,所以找不到任何单词。 拨打find_word并获取前一个字母a。现在将单词的搜索范围缩小到a的子树。

因此你可以从w * h * num_words * max_length只到w * h * max_length。