中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-08-25 09:16:47 來源:腳本之家 閱讀:197 作者:北鼻coder 欄目:開發技術

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 os
def 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)
 pass
getAllDir("G:\\")

輸出結果如下:

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

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

 二、深度遍歷與廣度遍歷

(一)、深度優先搜索

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

深度遍歷示意圖:

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

說明:

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

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

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

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

程序代碼:

#__author:"吉**"
#date: 2018/10/21 0021
#function:
# 深度優先遍歷目錄層級結構
import os
def 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 os
import collections
def 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 遞歸深度優先搜索與廣度優先搜索算法模擬實現 ,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

台江县| 宜阳县| 璧山县| 金湖县| 林口县| 静安区| 启东市| 麟游县| 韶关市| 永昌县| 鄂温| 滨州市| 伽师县| 吉安县| 始兴县| 玛纳斯县| 安吉县| 莒南县| 商南县| 九台市| 南京市| 金华市| 靖江市| 上饶市| 会同县| 阳江市| 政和县| 肇州县| 娱乐| 星子县| 从化市| 柏乡县| 琼结县| 龙岩市| 平原县| 怀远县| 三台县| 大城县| 岳普湖县| 石门县| 岗巴县|