題目.
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...