126 單詞接龍 II

2021-10-02 11:27:33 字數 1847 閱讀 9174

題目.

high

這其實就是圖的演算法,dijkstra演算法

這道題,先求直達的最小路徑,這個用bfs沒啥好說的,一般求路徑的問題就是要用dfs,可是不需要求所有的到達路徑,也不需要求隨意的一條到達路徑,不然dfs準沒錯。所以我們還是要用bfs,不過在bfs的時候,把經過的所有節點都求出從開始到他這兒的路徑,看起來好像很浪費空間,不過就這樣做確實可以達到目的,不然重構路徑確實很困難。

另外還有說spfa演算法,太複雜了不玩了

func

transfersteps

(w1, w2 string

)int

}return steps

}func

findladders

(beginword string

, endword string

, wordlist [

]string)[

][]string

,len

(wordlist)+1

)for

_, v :=

range wordlist

iftransfersteps

(v, beginword)

<=

1 wordmap[v]

=struct}if

!validbegin ||

!validend if_

, ok := wordmap[beginword]

;!ok

wordlist =

(wordlist, beginword)

} onestepmap :=

make

(map

[string][

]string

,len

(wordmap)

)for v :=

range wordmap

for i :=

0; i <

len(wordlist)-1

; i++}}

"neighbours", onestepmap)

visitpaths :=

make

(map

[string][

][]string

)//all paths to this node

for v :=

range onestepmap

visitpaths[beginword]=[

][]string

} prevvisited :=

make

(map

[string

]struct

) prevvisited[beginword]

=struct

currentchoices :=

string

breakflag :=

false

forlen

(currentchoices)

>0}

nextchoicesmap :=

make

(map

[string

]struct

)for

_, v1 :=

range currentchoices

if v2 == endword

nextchoicesmap[v2]

=struct}}

}"next:", nextchoicesmap)

if breakflag

else}}

"visited", visitpaths)

return visitpaths[endword]

}

126 單詞接龍 II

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

126 單詞接龍 II

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

126 單詞接龍 II

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