回朔演算法 字典查詢

2021-10-01 05:22:47 字數 1707 閱讀 1755

每天早上一道題 12.3

給定兩個單詞,乙個初始單詞,乙個目標單詞,乙個詞典,找到從初始單詞到目標單詞的最短路徑。

變換規則:

一次只能變換乙個位置的字元。

每一次轉換後的單詞,必須在字典中。

字典中沒有初始單詞

所有單詞長度相同

字典中沒有重複的詞

全部詞都是小寫

# 給定兩個單詞,乙個詞典,按照詞典從每次只能改變乙個字母,輸出最短的轉變方式

import copy

defsolve

(begin_world,end_word,dict_,path,res)

:if begin_world == end_word:

return

if end_word not

in dict_:

return

iflen

(dict_)==0

:return

else

:for i in

range

(len

(dict_)):

if compare(dict_[i]

,begin_world)==1

: temp_dict = copy.copy(dict_)

temp_path = copy.copy(path)

temp_word = temp_dict.pop(i)

solve(temp_word,end_word,temp_dict,temp_path,res# 回溯演算法

defget_res

(res)

:#根據已有結果,返回最佳結果

iflen

(res)==0

:return

else

: min_len =

len(res[0]

)for i in res:

temp_len =

len(i)

if temp_len min_len = temp_len

return

[i for i in res if

len(i)

== min_len]

defcompare

(word_a,word_b)

: num =

0for i in

range

(len

(word_a)):

if word_a[i]

!= word_b[i]

: num +=

1return num

if __name__ ==

'__main__'

: begin_world =

"hit"

end_word =

"cog"

word_list =

["hot"

,"dot"

,"dog"

,"lot"

,"log"

,"cog"

] res =

solve(begin_world,end_word,word_list,

[begin_world]

,res)

res = get_res(res)

print

(res)

python回朔演算法解八皇后問題

八皇后問題的解題思路 總共有92種解法,這裡舉例一種 def place x,k 判斷是否衝突 for i in range 1,k x i x k 判斷是否為同一行 abs x i x k abs i k 判斷是否在k個的對角線上 if x i x k or abs x i x k abs i k...

回朔法簡單總結

冷血之心的部落格 回溯法 探索與回溯法 是一種選優搜尋法,又稱為試探法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個狀態的點稱為 回溯點 在回溯法中,每次擴大當前部分解時,都面臨乙個可...

hdu(2553)(回朔搜尋)

此題是經典的n皇后問題,描述 在乙個n n的棋盤上要擺放n個皇后,要求任意兩個 皇后不能在同一行,同一列或者同一條與棋盤的邊成45度角的斜線上,即與對角線 平行的斜線上,求對於不同的n,各有多少種擺法使任意兩個皇后不能相互攻擊。用回溯法就可以解決,設皇后的編號依次為1,2,n,則可以認為第i個皇后 ...