日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 回溯算法

發布時間:2025/7/25 python 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 回溯算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

回溯算法(試探法)

在搜索嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就“回溯”返回,嘗試別的路徑。回溯法是一種選優搜索法,按選優條件向前搜索,以達到目標。但當探索到某一步時,發現原先選擇并不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個狀態的點稱為“回溯點”。

回溯算法解決問題的

  • 針對所給問題,定義問題的解空間,它至少包含問題的一個(最優)解。
  • 確定易于搜索的解空間結構,使得能用回溯法方便地搜索整個解空間 。
  • 以深度優先的方式搜索解空間,并且在搜索過程中用剪枝函數避免無效搜索。

實例:

地上有一個m行和n列的方格。一個機器人從坐標0,0的格子開始移動,
每一次只能向左,右,上,下四個方向移動一格,
但是不能進入行坐標和列坐標的數位之和大于k的格子。
例如,當k為18時,機器人能夠進入方格(35,37),因為3+5+3+7 = 18。但是,它不能進入方格(35,38),因為3+5+3+8 = 19。請問該機器人能夠達到多少個格子?

class Solution:def movingCount(self, threshold, rows, cols):"產生 0 矩陣 "board=[[0 for i in range(cols)] for j in range(rows)]global accacc = 0"下標之和,若大于threshold則TRUE,否則Folse"def block(r,c):s=sum(map(int,str(r)+str(c)))return s>thresholddef traverse(r,c):global accif not (0<=r<rows and 0<=c<cols): # 超出角標范圍挑出returnif board[r][c]!=0: # 不等于0 跳出returnif board[r][c]==-1 or block(r,c):board[r][c]=-1 #超出門限的點記錄-1returnboard[r][c]=1 #符合規定的點記錄1,并計數加一acc+=1traverse(r+1,c)traverse(r-1,c)traverse(r,c+1)traverse(r,c-1)traverse(0,0)return acco = Solution() print(o.movingCount(4 ,3 ,3))# 輸出結果: 9

轉載于:https://www.cnblogs.com/spmt/p/10607027.html

總結

以上是生活随笔為你收集整理的Python 回溯算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。