題目:
給了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...