2016-09-22 27 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。