126 單詞接龍 II

2021-10-10 11:47:48 字數 2019 閱讀 5929

題目描述:

給定兩個單詞(beginword 和 endword)和乙個字典 wordlist,找出所有從 beginword 到 endword 的最短轉換序列。轉換需遵循如下規則:

每次轉換只能改變乙個字母。

轉換後得到的單詞必須是字典中的單詞。

說明:

如果不存在這樣的轉換序列,返回乙個空列表。

所有單詞具有相同的長度。

所有單詞只由小寫字母組成。

字典中不存在重複的單詞。

你可以假設 beginword 和 endword 是非空的,且二者不相同。

示例 1:

輸入:beginword = 「hit」,

endword = 「cog」,

wordlist = [「hot」,「dot」,「dog」,「lot」,「log」,「cog」]

輸出:[

[「hit」,「hot」,「dot」,「dog」,「cog」],

[「hit」,「hot」,「lot」,「log」,「cog」]

]示例 2:

輸入:beginword = 「hit」

endword = 「cog」

wordlist = [「hot」,「dot」,「dog」,「lot」,「log」]

輸出:

解釋: endword 「cog」 不在字典中,所以不存在符合要求的轉換序列。

方法1:

主要思路:

(1)最短路徑,可以考慮使用廣度優先搜尋,剩下的就是建圖;

(2)將鄰接的雙向圖,則遍歷給出的字典,將可以相鄰轉換的字串使用對應的索引建立鄰接圖,這裡需要定義乙個判斷兩個字串是否是可以相互轉換的函式;

(3)在建立鄰接圖前,先對字典進行判斷,主要判斷兩點,乙個是是否包含終止字串,若不包含,則直接返回空結果,另乙個是是否包含開始字串,若不包含,則需要將開始字串插入到字典中;

class

solution

}return diff==1;

} vector>

findladders

(string beginword, string endword, vector

& wordlist)

else

if(end_id==-1

&&endword==wordlist[i])}

//若終止字串不存在字典中,則直接返回空結果

if(end_id==-1

);}//若起始字串不存在字典中,則將起始字串插入到字典中

if(begin_id==-1

)//建立鄰接圖

vectorint>>

edges

(wordlist.

size()

);//對字典中的字串進行兩兩判斷

for(

int i=

0;isize()

;++i)}}

vector>res;

//儲存結果

queueint>> q;

//廣度優先的佇列

vector<

int>

costs

(wordlist.

size()

,int_max)

;//用於判斷當前的轉換路徑能否插入到佇列中的輔助陣列

q.push

(vector<

int>(1

,begin_id));

//初始化,從起始字串開始

costs[begin_id]=0

;//初始化

while

(!q.

empty()

)//將轉換路徑壓入到結果

res.

push_back

(tmp);}

else}}

}return res;

//返回結果}}

;

126 單詞接龍 II

題目.high 這其實就是圖的演算法,dijkstra演算法 這道題,先求直達的最小路徑,這個用bfs沒啥好說的,一般求路徑的問題就是要用dfs,可是不需要求所有的到達路徑,也不需要求隨意的一條到達路徑,不然dfs準沒錯。所以我們還是要用bfs,不過在bfs的時候,把經過的所有節點都求出從開始到他這...

126 單詞接龍 II

給定兩個單詞 beginword 和 endword 和乙個字典 wordlist,找出所有從 beginword 到 endword 的最短轉換序列。轉換需遵循如下規則 每次轉換只能改變乙個字母。轉換過程中的中間單詞必須是字典中的單詞。說明 如果不存在這樣的轉換序列,返回乙個空列表。所有單詞具有相...

126 單詞接龍 II

題目描述 給定兩個單詞 beginword 和 endword 和乙個字典 wordlist,找出所有從 beginword 到 endword 的最短轉換序列。轉換需遵循如下規則 每次轉換只能改變乙個字母。轉換後得到的單詞必須是字典中的單詞。說明 示例 1 輸入 beginword hit end...