基本的なプログラミングのpython:pythonの再帰深さ優先探索と幅優先探索アルゴリズムのシミュレーションを達成するために

この記事では、達成するための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
'''

ここに画像を挿入説明

#__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:\\")

次のように出力結果は以下のとおりです。
ここに画像を挿入説明
第二に、深さと幅トラバーサルトラバーサル

(A)、深さ優先探索

説明:深さ優先探索スタック構造のシミュレーションで

深さの概略横断:ここに画像を挿入説明
説明:

最初に押し、AはしばらくケースBスタックプッシュ(Cが処理されていない保つために)同様に、スタック内の場合D、HIのDEように、BCにスタックを押しながらプッシュ、そして最終的にはトップダウンから

スタックから要素をスタックを削除し、まだ、すなわち、深さ優先トラバーサル。

ケースの練習:の検索ディレクトリ構造の深プリントアウトするためにスタックを使用してここに画像を挿入説明
プログラムコードを:

#__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')

結果:ここに画像を挿入説明
(S-05-1節):プロセスが説明するための図であるここに画像を挿入説明
原理分析:ここに画像を挿入説明
説明:

   队列是 先进先出的模型。A先进队,在A出队的时候,C B入队,按图示,C出队,FG 入队,B出队,DE入队,

Fデキュー、チームへのJKは、Gは、層プロセスによって、すなわち、ノーのチームに、最終的に、エンキューHI、チーム、Dデキューすることなく、それぞれの層をデキューEJKHIをデキュー

したがって:FIFOキュー構造は、第1横断を達成するために。最後のアウトスタック構造は、深さ優先探索を実現しています。

コードの実装:

実際には、深さ優先と幅優先コードを書く上ではなく、同じ基本的に、非常に異なっているが、一方が(リストでシミュレート)スタック構造を使用することです

別の(幅優先トラバーサル)のデータ構造は、待ち行列FIFOの目的を達成するために使用されます。

#__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再帰深さ優先探索と達成するための最初の検索アルゴリズムのシミュレーションを紹介する小さなシリーズの広さで、私たちは、あなたが何か質問が私にメッセージをお願いしている場合は、小扁は、速やかに全員に返信させていただきます、助けたいと思います。

公開された25元の記事 ウォン称賛7 ビュー30000 +

おすすめ

転載: blog.csdn.net/haoxun11/article/details/104953841