深度优先搜索的递归算法,设计一个程序实现深度优先搜索(使用递归算法)
@本文来自微信官方账号: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核心知识,深入学习计算机基础知识,并进行整理。如果你不甘平庸,那就在编码之外加入我,不断成长!
其实这里不仅有技术,还有那些技术之外的东西。比如如何做一个精致的程序员而不是“屌丝”?程序员本身就是高尚的存在,不是吗?【点击加入】想做自己,做一个高尚的人,来吧!