每天早上一道題 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個皇后 ...