給定字典詞典,兩個API Is_word(字符串) Is_prefix(字符串) 以及一個NxN矩陣,每個位置由一個字符組成。如果從任何位置(i,j)可以在四個方向中的任何一個方向移動 ,請找出矩陣中可以形成的所有有效單詞。 (循環是不允許的,也就是說,如果從(i,j)開始並移動到(i-1,j),然後從此位置移動到 ,則形成字位置,則不能返回到(i,j))查找矩陣中的有效字
什麼我trie ::我可以看到一個指數解決方案,我們去所有的可能性和跟蹤已訪問的索引。我們能有更好的解決方案嗎?
給定字典詞典,兩個API Is_word(字符串) Is_prefix(字符串) 以及一個NxN矩陣,每個位置由一個字符組成。如果從任何位置(i,j)可以在四個方向中的任何一個方向移動 ,請找出矩陣中可以形成的所有有效單詞。 (循環是不允許的,也就是說,如果從(i,j)開始並移動到(i-1,j),然後從此位置移動到 ,則形成字位置,則不能返回到(i,j))查找矩陣中的有效字
什麼我trie ::我可以看到一個指數解決方案,我們去所有的可能性和跟蹤已訪問的索引。我們能有更好的解決方案嗎?
我會傾向於通過創建兩個並行數據結構來解決這個問題。一個是單詞列表(刪除重複項)。另一種是前綴矩陣,其中每個元素都是一個列表。希望可以使用這樣的數據結構。列表矩陣實際上可以是三元組列表,其中原始矩陣中包含單詞和座標。
無論如何,通過原始矩陣並在每個元素上調用isword()。如果有單詞,則將單詞插入單詞列表中。
然後通過原始矩陣,並比較每個元素上的調用isprefix()。如果有前綴,則插入前綴矩陣。
然後,通過前綴矩陣並測試前綴與附加字母的四種組合。如果一個單詞,然後放在單詞列表中。如果有前綴,則添加到前綴矩陣中的最後一個字母的位置。由於一個詞可以是一個前綴,所以請記住做這兩個。
此外,在前綴列表中,您不僅需要保留一個列表中的字母列表,而且還要保留已使用的字母的位置。這用於防止循環。
然後繼續此過程,直到沒有詞語和前綴。
很難衡量這個結構的複雜性,因爲它似乎取決於字典的內容。
我認爲你不能在這裏擊敗指數。證明?
想一想,如果你有一個矩陣,你要排列字母,這樣每個組合就是一個有效的字典單詞,例如當你從[i,j]開始時, [i,j]與[i-1,j]或[i + 1,j]或[i,j + 1]或[i,j-1]組合都是2個字母單詞,並且遞歸地繼續長度n的組合(根據你的規則)是一個詞。在這種情況下,你不可能比暴力強。
所以你想要解決一個類似於遊戲般的遊戲? HTTP://計算器。com/questions/746082/how-to-find-list-of-a-letter-matrix-boggle-solver – argentage 2012-07-13 04:38:08