深度优先搜索的递归算法,设计一个程序实现深度优先搜索(使用递归算法)

  深度优先搜索的递归算法,设计一个程序实现深度优先搜索(使用递归算法)

  @本文来自微信官方账号:csdn2299,喜欢可以关注微信官方账号的程序员学院。

  本文主要介绍python递归深度优先搜索算法和广度优先搜索算法的仿真实现。是的,有一定的参考价值,有需要的朋友可以参考一下。

  递归原理的一个小案例分析

  (1) #总结

  递归:即函数调用自身。也就是说,递归的所有循环都可以做,递归是常见的!

  (2)写一个递归过程。

  1.写出临界条件。

  2.找出这次和上次的关系。

  3.假设当前函数已经可以使用,调用自身计算上一次的结果,得到这次的结果。

  (3)案例分析:1)2…n个数之和

  #摘要

  ""

  递归:也就是说,一个函数调用自己,实现递归。

  在循环中可以做的事情通常可以在递归中完成!

  ""

  写递归过程

  ""

  1.写出临界条件。

  2.找出这次和上次的关系。

  3.假设当前函数已经可以使用,调用自身计算上一次的结果,得到这次的结果。

  ""

  #问题:请输入大于1的数字以查找1 2 3。

  定义和(n):

  如果n==1:

  1次返回

  否则:

  返回Nsum (n-1)。

  n=输入(请输入:)

  Print(输出的和是:),sum) int(n))

  ""

  输出:

  请输入:4

  输出的总和是:10

  ""

  # _ _作者:“冀*贾”

  #日期:2018/10/21 0021

  #功能:

  导入操作系统

  efgetalldir(路径) :

  fileList=os.listdir(路径)

  是打印(文件列表)

  对于文件列表中的文件名:

  fileAbspath=OS.path.join(路径,文件名)))))).

  ifOS.path.isdir(fileAbspath):

  打印( $ $目录$:,文件名))。

  Getalldir(文件路径))。

  否则:

  打印( **普通文件!*,文件名)

  # print(文件列表))。

  及格

  getalldir(g:()))))))getalldir(g:())))))).

  输出结果如下。

  二。深度遍历和广泛遍历

  (1)深度优先搜索

  描述:深度优先搜索由栈结构模拟。

  扫描深度图像

  描述:

  首先把A放到栈上,在A栈的同时把B C放到栈上。此时,将B放入栈中,将DE放入栈中。(C留作处理))同样,当D出现在堆栈上时,H I进入堆栈,最后从上至下。

  取出堆栈中尚未离开堆栈的元素是深度优先路径。

  案例研究:使用堆栈搜索和打印深度目录结构

  程序代码:

  # _ _作者:《纪* *》

  #日期:2018/10/21 0021

  #功能:

  #优先移动目录层次的深度

  导入操作系统

  defgetalldirdp(路径) :

  stack=[]

  #按压操作相当于图中的按压。

  stack.append(路径)

  #处理堆栈,如果堆栈为空,则结束循环

  Wile len (stack)!=0:

  #从堆栈中获取数据相当于在取出A的同时取出A并压入BC。

  dirPath=stack.pop(

  firstList=os.listdir(目录路径)

  #判断:在目录栈中堆栈目录地址,用普通文件打印,不要用目录。

  第一个文件名列表:

  file abspath=OS.path.join(目录路径,文件名)))))))))))).

  ifOS.path.isdir(fileAbspath):

  #这是一个目录,这是一个堆栈

  打印(目录:,文件名))。

  Stack.append(文件abspath)。

  否则:

  #普通文件打印出来就行,不要叠加。

  打印(普通文件:,文件名))。

  GetDirDP (r e: ([AAA])千)学习python全栈)

  18-10-21day7tempdir )

  结果:

  工艺流程图说明:(s-05-1部分)

  描述:

  这是一种先进先出的模式。进阶A队,A离队,C B入队。根据图示,C离队,FG入队,B离队,DE入队。

  f队,JK队,G队,无队,D队,H I队,最后是E J K H I队,无队,也就是每一层的处理,

  因此,FIFO队列结构实现了广度优先遍历。后进先出堆栈结构实现深度优先遍历。

  代码实现:

  其实深度优先和广度优先在代码编写上差别不大,基本是一样的,只不过用的是堆栈结构(用list模拟)。

  另一种(广度优先遍历)是利用队列数据结构实现FIFO的目的。

  # _ _作者:《纪* *》

  #日期:2018/10/21 0021

  #功能:

  #广度优先搜索模拟

  #使用队列模拟广度优先搜索

  导入操作系统

  导入收藏

  def getAllDirIT(路径):

  queue=collections.deque()

  #加入团队

  queue.append(路径)

  # loop,当队列为空时停止循环

  while len(队列)!=0:

  #这里的数据出列相当于求元素a的绝对路径。

  dirPath=queue.popleft()

  #找出以下目录中的所有子目录信息,或以下目录中的文件信息。

  目录列表=os.listdir(目录路径)

  #遍历此文件夹下的其他信息

  对于目录列表中的文件名:

  #绝对路径

  dirAbsPath=os.path.join(目录路径,文件名)

  #判断:如果是目录dir的队列操作,如果不是dir,就打印出来。

  if os.path.isdir(dirAbsPath):

  打印(“目录:”文件名)

  queue.append(dirAbsPath)

  否则:

  打印(“普通文件:”文件名)

  #函数的调用

  GetDirit (r e: [AAA](千)全栈学习python18-10-21day7tempdir )

  广度优先操作的输出结构:

  首先是插图:从左到右遍历每一层。

  非常感谢您的阅读。

  大学的时候,我选择自学python。工作的时候发现自己苦于计算机基础不好,学历也不好。这是

  做不到的只能后天补上,于是开始了自己的编码外逆袭之路,不断学习python核心知识,深入学习计算机基础知识,并进行整理。如果你不甘平庸,那就在编码之外加入我,不断成长!

  其实这里不仅有技术,还有那些技术之外的东西。比如如何做一个精致的程序员而不是“屌丝”?程序员本身就是高尚的存在,不是吗?【点击加入】想做自己,做一个高尚的人,来吧!

深度优先搜索的递归算法,设计一个程序实现深度优先搜索(使用递归算法)