国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python 遞歸深度優先搜索與廣度優先搜索算法模擬實現

2020-01-04 14:16:42
字體:
來源:轉載
供稿:網友

python,遞歸,深度優先搜索,廣度優先搜索,算法

 一、遞歸原理小案例分析

(1)# 概述

遞歸:即一個函數調用了自身,即實現了遞歸 凡是循環能做到的事,遞歸一般都能做到!

(2)# 寫遞歸的過程

1、寫出臨界條件

2、找出這一次和上一次關系

3、假設當前函數已經能用,調用自身計算上一次的結果,再求出本次的結果

(3)案例分析:求1+2+3+...+n的數和

# 概述'''遞歸:即一個函數調用了自身,即實現了遞歸凡是循環能做到的事,遞歸一般都能做到!'''# 寫遞歸的過程'''1、寫出臨界條件2、找出這一次和上一次關系3、假設當前函數已經能用,調用自身計算上一次的結果,再求出本次的結果'''# 問題:輸入一個大于1 的數,求1+2+3+....def sum(n): if n==1:  return 1 else:  return n+sum(n-1)n=input("請輸入:")print("輸出的和是:",sum(int(n)))'''輸出:請輸入:4輸出的和是: 10'''

python,遞歸,深度優先搜索,廣度優先搜索,算法

#__author:"吉*佳"#date: 2018/10/21 0021#function:import osdef getAllDir(path): fileList = os.listdir(path) print(fileList) for fileName in fileList:  fileAbsPath = os.path.join(path,fileName)  if os.path.isdir(fileAbsPath):   print("$$目錄$$:",fileName)   getAllDir(fileAbsPath)  else:   print("**普通文件!**",fileName) # print(fileList) passgetAllDir("G://")

輸出結果如下:

python,遞歸,深度優先搜索,廣度優先搜索,算法

python,遞歸,深度優先搜索,廣度優先搜索,算法

 二、深度遍歷與廣度遍歷

(一)、深度優先搜索

說明:深度優先搜索借助棧結構來進行模擬

深度遍歷示意圖:

python,遞歸,深度優先搜索,廣度優先搜索,算法

說明:

先把A壓棧進去,在A出棧的同時把B C壓棧進去,此時讓B出棧的同時把DE壓棧(C留著先不處理) 同理,在D出棧的時候,H I壓棧,最后再從上往下

取出棧內還未出棧的元素,即達到深度優先遍歷。

案例實踐:利用棧來深度搜索打印出目錄結構

python,遞歸,深度優先搜索,廣度優先搜索,算法

程序代碼:

#__author:"吉**"#date: 2018/10/21 0021#function:# 深度優先遍歷目錄層級結構import osdef getAllDirDP(path): stack = [] # 壓棧操作,相當于圖中的A壓入 stack.append(path) # 處理棧,當棧為空的時候結束循環 while len(stack) != 0:  #從棧里取數據,相當于取出A,取出A的同時把BC壓入  dirPath = stack.pop()  firstList = os.listdir(dirPath)  #判斷:是目錄壓棧,把該目錄地址壓棧,不是目錄即是普通文件,打印  for filename in firstList:   fileAbsPath=os.path.join(dirPath,filename)   if os.path.isdir(fileAbsPath):    #是目錄就壓棧    print("目錄:",filename)    stack.append(fileAbsPath)   else:    #是普通文件就打印即可,不壓棧    print("普通文件:",filename)getAllDirDP(r'E:/[AAA](千)全棧學習python/18-10-21/day7/temp/dir')

結果:

python,遞歸,深度優先搜索,廣度優先搜索,算法

該過程示意圖解釋:(s-05-1部分)

python,遞歸,深度優先搜索,廣度優先搜索,算法

python,遞歸,深度優先搜索,廣度優先搜索,算法

原理分析:

python,遞歸,深度優先搜索,廣度優先搜索,算法

說明:

       隊列是 先進先出的模型。A先進隊,在A出隊的時候,C B入隊,按圖示,C出隊,FG 入隊,B出隊,DE入隊,

F出隊,JK入隊,G出隊,無入隊,D出隊,H I入隊,最后E J K H I出隊,均無入隊了,即每一層一層處理、

故:先進先出的隊列結構實現了廣度優先遍歷。 先進后出的棧結構實現的是深度優先遍歷。

代碼實現:

其實深度優先和廣度優先在代碼書寫上是差別不大的,基本相同,只是一個是使用棧結構(用列表進行模擬)

另一個(廣度優先遍歷)是使用了隊列的數據結構來達到先進先出的目的。

#__author:"吉**"#date: 2018/10/21 0021#function:# 廣度優先搜索模擬# 利用隊列來模擬廣度優先搜索import osimport collectionsdef getAllDirIT(path): queue=collections.deque() #進隊 queue.append(path) #循環,當隊列為空,停止循環 while len(queue) != 0:  #出隊數據 這里相當于找到A元素的絕對路徑  dirPath = queue.popleft()  # 找出跟目錄下的所有的子目錄信息,或者是跟目錄下的文件信息  dirList = os.listdir(dirPath)  #遍歷該文件夾下的其他信息  for filename in dirList:   #絕對路徑   dirAbsPath = os.path.join(dirPath,filename)   # 判斷:如果是目錄dir入隊操作,如果不是dir打印出即可   if os.path.isdir(dirAbsPath):    print("目錄:"+filename)    queue.append(dirAbsPath)   else:    print("普通文件:"+filename)# 函數的調用getAllDirIT(r'E:/[AAA](千)全棧學習python/18-10-21/day7/temp/dir')

廣度優先運行輸出結構:

python,遞歸,深度優先搜索,廣度優先搜索,算法

先圖解:按照每一層從左到右遍歷即可實現。

python,遞歸,深度優先搜索,廣度優先搜索,算法

總結

以上所述是小編給大家介紹的python 遞歸深度優先搜索與廣度優先搜索算法模擬實現 ,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邹城市| 鄂托克前旗| 连平县| 瑞丽市| 鄂伦春自治旗| 乳山市| 汝阳县| 安远县| 平昌县| 泰来县| 宁强县| 西昌市| 巴塘县| 古蔺县| 长沙县| 云龙县| 礼泉县| 阜新| 五原县| 庆元县| 兴海县| 青铜峡市| 独山县| 玉龙| 崇阳县| 拉萨市| 原平市| 小金县| 永靖县| 开化县| 衡南县| 潞西市| 德令哈市| 子长县| 崇仁县| 吴桥县| 屏东县| 宜阳县| 乌恰县| 赣州市| 天峨县|