演算法設計與分析第五周作業 Word Ladder

2021-08-28 13:18:24 字數 2023 閱讀 8716

上週找了一道深度搜尋優先搜尋的演算法題來做,於是這週就選了一道廣度優先搜尋演算法題來試試手。

題目大意:給出乙個字串(單詞)集合和兩個字串,乙個為開始字串,乙個為結束字串,每次通過改變乙個字元使得從開始字串依次轉變為字串集合裡的字串,直到轉化為結束字串,求所用到的最少的步數。

注:樣例說明:

input:

beginword = "hit",

endword = "cog",

wordlist = ["hot","dot","dog","lot","log","cog"]

output: 5

explanation: as one shortest transformation is "hit" -> "hot" -> "dot" -> "dog" -> "cog",

return its length 5.

input:

beginword = "hit"

endword = "cog"

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

output: 0

explanation: the endword "cog" is not in wordlist, therefore no possible transformation.

很顯然,題目需要我們通過對每個單詞進行廣蒐以求得最短的路徑。可以構建這樣的模型:以每個字串為頂點,如果字串集合中存在乙個只需要當前字串修改乙個字元就能達到的字串,那麼這兩個字串之間就存在有一條邊,可以理解為邊的值為1。

根據已知條件,我們可知知道應該使用的資料結構為:

其中,queue使用鍵值對來進行對步數的記錄,每乙個值由(當前字串,步數)的鍵值對組成。

具體演算法:依次對當前字串的各個字元進行變換,如果變換之後得到的字串在字串集合中,那麼說明是可以進行轉換的,此時遞增步數,並把該字串放入到佇列中,同時從字串集合中移除,直至轉換到結束字串,返回當前的步數,即佇列值的數值。

class solution 

if (wordlist.find(endword) == wordlist.end()) return 0;

queue> que;

que.push(make_pair(beginword, 1));

while(!que.empty()) }}

}return 0;

}};

上面的題目主要考察簡單的廣度優先搜尋演算法,是比較簡單的。同時leetcode上有一道word ladder ii,雖然題目類似,word ladder ii要求把具體的所有最短的路徑找出來作為返回值。下面我們來分析一下該題:

word ladder ii

演算法過程:把起始路徑加入路徑集paths,當paths非空時進行迴圈,取佇列頭路徑,把路徑的最後乙個達到的字串拿出來進行廣搜,即對每個字元,都從『a』-『z』進行轉換,如果dict中有該中間轉換得到的字串,說明滿足條件可以進行路徑的記錄,此時判斷該字串是否為結束字串,如果是,則找到一條路徑,否則把得到的新路徑加入paths中,繼續迴圈。需要注意的是如果paths裡的路徑的長度大於level,說明字典中的有些詞已經存入路徑了,如果在路徑中重複出現,則肯定不是最短路徑,所以我們需要在字典中將這些詞刪去,然後將words清空。

**詳情:

class solution ;

queue> paths;

paths.push(p);

int level = 1, minlevel = int_max;

unordered_setwords;

while (!paths.empty())

string last = t.back();

for (int i = 0; i < last.size(); ++i) else paths.push(nextpath);}}

}return res;

}};

謝謝閱讀。

第五周作業

includeusing namespace std class student 用引數的初始化表對資料成員初始化。void max student arr void display private int num int score void student display void studen...

第五周作業

5求自然對數 include using namespace std int main cout e 6求圓周率 include include using namespace std int main cout pi約等於 7 include using namespace std int mai...

第五周作業

注意 總時間限制 1000ms 記憶體限制 65536kb 描述寫乙個mystring 類,使得下面程式的輸出結果是 1.abcd efgh abcd 2.abcd 3.4.abcd efgh 5.efgh 6.c 7.abcd 8.ijal 9.ijal mnop 10.qrst abcd 11....