2016-09-22 25 views
1

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

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中实现。

注意:字母可以在网格中重复,也就是说,您可以根据需要多次跳转同一个字母。

回答

0

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