采访网格中的预备词

时间:2016-09-22 16:33:19

标签: algorithm grid branch words

我一直在做面试准备问题,这是一个我遇到麻烦的问题,因为我不确定如何实施解决方案。所以这就是设置。你给了一个8x8的字母网格和一个单词列表,你必须返回列表中最长的单词,这个单词可以通过从网格上的一个字母开始,然后以一个字母的方式在网格上移动。国际象棋骑士。例如,如果你有列表[" word"," string"," test"]和以下网格:

Y W E Z T N U W
O P A A C Q G F
T E L Z X C V B
N M M W F R T O
U I O N A S D F
B E J O L Z V C
T B N M Q W E R
T A S G X Z R S

然后你会返回"测试",因为这可以通过从网格的左下角开始形成“T'”,向上跳两个,向右跳到得到' E'跳过两个和右一个得到' S'然后离开两个和一个得到' T'并且没有可以在此网格上形成其他单词。

我认为您使用的是分支定界算法,但我完全不知道如何设置它。有人可以帮忙吗?我试图在python中实现。

注意:字母可以在网格中重复,即您可以根据需要多次跳转到相同的字母。

1 个答案:

答案 0 :(得分:0)

我的解决方案是: 对于数组中的每个单词,遍历矩阵以找到第一个字母,然后您可以在第一个字母的邻居上使用呼吸优先搜索(BFS)或深度优先搜索(DFS)(在这种情况下,它将是8个位置)一个骑士可以跳到),看看他们是否匹配。您可以分别使用队列或堆栈迭代地实现BFS或DFS。