最小運算元遞迴實現

2021-06-19 01:21:45 字數 1268 閱讀 5366

題目:

給了a、b兩個單詞和乙個單詞集合dict,每個的長度都相同。我們希望通過若干次操作把單詞a變成單詞b,每次操作可以改變單詞中的乙個字母,同時,新產生的單詞必須是在給定的單詞集合dict中。求所有行得通步數最少的修改方法。

舉個例子如下:

given:

a = "hit"  

b = "cog" 

dict = ["hot","dot","dog","lot","log"]

return

[["hit","hot","dot","dog","cog"],

["hit","hot","lot","log","cog"]]

分析:1.採用的是遞迴實現

2.最短路徑必須是不能有重複的詞出現,否則極易容易產生無限迴圈,況且也不是最佳路徑

3.因為每次只能換乙個單詞,分析詞法是否能轉換,必須至少有(單詞長度-1)個相同,結尾詞也是如此判斷

4.一次執行結束和已經儲存的記錄比較,如果相同則加入結果集中,如果比存在的記錄短,則清空結果集並存入該記錄

問題:沒有經過嚴格測試,可能存在一些問題

執行效率不高,存在改進的地方

主要**:

public vector> findladders(string start, string end, setdict) 

while(it.hasnext())

--layer;

path = path.substring(0, path.lastindexof(currdict));//該層查詢完畢後需要去掉}}

} if(layer == 1)

return null;//走到這一步,說明一次查詢失敗 }

public void addpathbylayer(string path, vectorpaths, boolean isfindall)elseelse

}} }

結果:

2013-11-06 13:00:29 363

結果個數:2

[[hit, hot, lot, log, cog], [hit, hot, dot, dog, cog]]

2013-11-06 13:00:29 369

2013-11-06 13:00:29 369

結果個數:3

[[a2b, a2n, b2n, bmn], [a2b, a2n, amn, bmn], [a2b, b2b, b2n, bmn]]

2013-11-06 13:00:29 372

最小運算元

剛才在剛果準備挑戰最小運算元的。可是操作失誤,調教了白 在自己電腦上用c 環境試了試。竟然花了3個小時,哎,挑戰也是失敗了。題目詳情 給了a b兩個單詞和乙個單詞集合dict,每個的長度都相同。我們希望通過若干次操作把單詞a變成單詞b,每次操作可以改變單詞中的乙個字母,同時,新產生的單詞必須是在給定...

最小運算元

給了a b兩個單詞和乙個單詞集合dict,每個的長度都相同。我們希望通過若干次操作把單詞a變成單詞b,每次操作可以改變單詞中的乙個字母,同時,新產生的單詞必須是在給定的單詞集合dict中。求所有行得通步數最少的修改方法。舉個例子如下 given a hit b cog dict hot dot do...

25最小運算元問題

題目描述 給定乙個單詞集合dict,其中每個單詞的長度都相同。現從此單詞集合dict中抽取兩個單詞a b。希望通過若干次操作把單詞a變成單詞b,每次操作可以改變單詞的乙個字母,同時,每次操作後,新產生的單詞必須是在給定的單詞集合dict中。求所有行得通步數最少的修改方法。舉個例子如下 given a...