最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實現(xiàn)三壺謎題的示例詳解

 更新時間:2020年11月02日 15:55:37   作者:仙九玖玖  
這篇文章主要介紹了python實現(xiàn)三壺謎題功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

前言

有一個充滿水的8品脫的水壺和兩個空水壺(容積分別是5品脫和3品脫)。通過將水壺完全倒?jié)M水和將水壺的水完全倒空這兩種方式,在其中的一個水壺中得到4品脫的水。

一、算法思想

算法分析

  1. 采用的算法思想是將某個時刻水壺中水的數(shù)量看作一個狀態(tài),用一個長度為3的數(shù)組表示。
  2. 初始狀態(tài)便為[8,0,0],再拓展他的下一結點的可能結構。
  3. 若下一結點的結構已經(jīng)被拓展過了便放棄,若沒有拓展過則加入拓展列表(open_list)中。然后遞歸上述操作。
  4. 直到拓展列表(open_list)為空或者找到目標為止。

思想圖解

這里的第一個數(shù)就代表著是那個8品脫的瓶子,依次分別是8品脫,5品脫,3品脫

就如同上圖一樣,使用層次遍歷一次一次遞歸擴展新的結點,知道找到4品脫的水或者無結點可擴展為止(類似于廣度優(yōu)先遍歷)。

二、代碼展示

1.創(chuàng)建樹節(jié)點結構

節(jié)點包括兩個屬性,一個屬性是數(shù)組類型的,存儲當前三個水壺的容量狀態(tài),另一個屬性是記錄它是由哪個結點擴展過來的,以便找到解決路徑:

class node: # 創(chuàng)建樹節(jié)點
 def __init__(self, data):
  self.data = data # 存儲三個壺的容量狀態(tài)
  self.per = None # 存儲上一時刻三個壺的容量狀態(tài)

2.實現(xiàn)傾倒動作

由于這里只有三個壺,互相傾倒的方案可以枚舉出來,所有我就沒使用二重嵌套循環(huán),而是使用一層循環(huán):

def pour(n): # 擴展子節(jié)點
 r_list = n.data # 記錄當前三個水壺的容量狀態(tài)
 max_list = [8, 5, 3] # 水壺的最大容量
 for i, j in ((0, 1), (0, 2), (1, 2), (1, 0), (2, 0), (2, 1)):
  if r_list[i] != 0:
   n_list = r_list.copy() # 初始化下一結點的水壺狀態(tài)
   if r_list[i] + r_list[j] > max_list[j]:
    n_list[i] = r_list[i] - (max_list[j] - r_list[j])
    n_list[j] = max_list[j]
   else:
    n_list[j] = r_list[i] + r_list[j]
    n_list[i] = 0
   flag = True # 記錄水壺的狀態(tài)是否已經(jīng)發(fā)生過(擴展過)
   for one in closed_list:
    if one.data == n_list: # 比較當前水壺狀態(tài)和以往記錄過得水壺狀態(tài)
     flag = False
   if flag:
    print("擴展的新節(jié)點是:",n_list)
    new_node = node(n_list) # 創(chuàng)建新節(jié)點存儲水壺的新狀態(tài)
    new_node.per = n
    open_list.append(new_node)

主遞歸函數(shù)

查看當前是否已經(jīng)擴展到4品脫的水或者是否還有結點可以擴展。

def BFS_node(root_1): # 遞歸查找子節(jié)點的擴展狀態(tài)以及查驗是否找到4品脫的水壺
 n = root_1
 print("當前節(jié)點:",n.data)
 if open_list is None:
  return "沒有找到4品脫的水"
 nodelist = n.data
 if 4 in nodelist:
  print("找到了4品脫的水")
  print_node(n)
  return "找到了4品脫的水"
 closed_list.append(open_list.pop(0))
 pour(n)
 print("*******")
 BFS_node(open_list[0])

數(shù)據(jù)初始化

數(shù)據(jù)初始化,以及找到4品脫水后打印路徑的打印函數(shù)。

def print_node(n): # 打印正確的水壺操作路徑
 if n.per == None:
  return ""
 print(n.data)
 print_node(n.per)


# 初始化數(shù)據(jù)
root = node([8, 0, 0])
open_list = [root] # 存儲已找到卻未被擴展的子節(jié)點
closed_list = [] # 存儲已找到且被擴展的子節(jié)點
BFS_node(open_list[0])

總結

主要是用廣度優(yōu)先遍歷的思想和樹結構,當然如果不在意找到4品脫的水的路徑,其實沒必要使用樹結構。另外打印函數(shù)是從最后一層依次往上回溯的,所以顯示的是倒序的路徑。如果需要變成正向的話,可以加一個棧來實現(xiàn)。

到此這篇關于python實現(xiàn)三壺謎題的示例詳解的文章就介紹到這了,更多相關python三壺謎題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python實現(xiàn)TCPserver的使用示例

    python實現(xiàn)TCPserver的使用示例

    python實現(xiàn)TCPserver是一件簡單的事情,只要通過socket這個模塊就可以實現(xiàn),本文就來介紹一下python實現(xiàn)TCPserver的使用示例,感興趣的可以了解一下
    2023-10-10
  • Python字典深淺拷貝與循環(huán)方式方法詳解

    Python字典深淺拷貝與循環(huán)方式方法詳解

    這篇文章主要介紹了Python字典深淺拷貝與循環(huán)方式方法詳解,需要的朋友可以參考下
    2020-02-02
  • Python中l(wèi)ist循環(huán)遍歷刪除數(shù)據(jù)的正確方法

    Python中l(wèi)ist循環(huán)遍歷刪除數(shù)據(jù)的正確方法

    這篇文章主要給大家介紹了關于Python中l(wèi)ist循環(huán)遍歷刪除數(shù)據(jù)的正確方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • Python 解決logging功能使用過程中遇到的一個問題

    Python 解決logging功能使用過程中遇到的一個問題

    這篇文章主要介紹了Python 解決logging功能使用過程中遇到的一個問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • python實現(xiàn)字符串和日期相互轉換的方法

    python實現(xiàn)字符串和日期相互轉換的方法

    這篇文章主要介紹了python實現(xiàn)字符串和日期相互轉換的方法,涉及Python中time和datetime函數(shù)使用技巧,需要的朋友可以參考下
    2015-05-05
  • 最新Python?APScheduler?定時任務詳解

    最新Python?APScheduler?定時任務詳解

    這篇文章主要介紹了Python使用apscheduler模塊設置定時任務,APScheduler全稱Advanced?Python?Scheduler?作用為在指定的時間規(guī)則執(zhí)行指定的作業(yè),本文對Python?APScheduler?定時任務相關知識介紹的非常詳細,需要的朋友參考下
    2022-05-05
  • Django 淺談根據(jù)配置生成SQL語句的問題

    Django 淺談根據(jù)配置生成SQL語句的問題

    今天小編就為大家分享一篇Django 淺談根據(jù)配置生成SQL語句的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • python基礎編程小實例之計算圓的面積

    python基礎編程小實例之計算圓的面積

    Python是最常用的編程語言,這種語言就是一種可以快速開發(fā)應用的解釋型語言,有些用戶不知道該怎么在Python編程里計算圓的面積,現(xiàn)在就給大家具體解釋一下,下面這篇文章主要給大家介紹了關于python基礎編程小實例之計算圓的面積的相關資料,需要的朋友可以參考下
    2023-03-03
  • wxPython框架類和面板類的使用實例

    wxPython框架類和面板類的使用實例

    這篇文章主要介紹了wxPython框架類和面板類的使用實例,主要實現(xiàn)了自定義框架類及其完整的調(diào)用方法,代碼簡單高效,是進一步學習wxPython框架類的基礎,需要的朋友可以參考下
    2014-09-09
  • 利用OpenCV給彩色圖像添加椒鹽噪聲的方法

    利用OpenCV給彩色圖像添加椒鹽噪聲的方法

    椒鹽噪聲是數(shù)字圖像中的常見噪聲,一般是圖像傳感器、傳輸信道及解碼處理等產(chǎn)生的黑白相間的亮暗點噪聲,椒鹽噪聲常由圖像切割產(chǎn)生,這篇文章主要給大家介紹了關于利用OpenCV給彩色圖像添加椒鹽噪聲的相關資料,需要的朋友可以參考下
    2021-10-10

最新評論

马龙县| 乌兰察布市| 天全县| 石家庄市| 泰兴市| 綦江县| 时尚| 鄂尔多斯市| 天峻县| 交城县| 平陆县| 萍乡市| 平陆县| 丰顺县| 上饶市| 兴安盟| 修文县| 佛山市| 抚顺市| 青冈县| 盘山县| 怀来县| 西宁市| 东港市| 呼玛县| 彭阳县| 元朗区| 博湖县| 滦南县| 仁怀市| 孝感市| 封开县| 雅安市| 辉县市| 定西市| 延寿县| 马鞍山市| 彭州市| 赣州市| 锡林郭勒盟| 靖江市|