python迷宫万花筒代码_利用广度优先遍历搜索迷宫的python源代码
广度优先遍历简称为DFS,是数据结构中比较常用的一个算法,主要原理是采用队列先进先出的规则,一层一层的访问图的节点。而迷宫问题接近与遍历,但是不同于遍历,主要考虑是采用栈的形式标记路径,并对当前节点和死胡同分别标记为2和3,对死胡同的节点弹出栈,这样循环最终会找到一个路径。当然,存在一个问题就是不一定是最优的路径。
'''
Title:广度优先遍历探索迷宫
Date: 2018-04-18
Author:Jackie
Commont:
1、使用栈stack保存路径
2、采用广度优先遍历,将当前节点(栈的顶点)可用的临近节点全部压栈,并标记为2
3、对于发现死胡同时,将当前节点弹出栈,并标记为3
4、不需要使用队列,因为队列主要实现遍历,而不是最优化
'''
from collections import deque
matrix = [
[0, 1, 0, 0, 1],
[0, 1, 0, 1, 0],
[0, 0, 0, 0, 0],
[0, 1, 1, 1, 0],
[0, 0, 0, 1, 0]
]
# dfs function
def dfs_fun(matrix, start, end):
stack = []
stack.append(start)
x, y = start
matrix[x][y] =2
forward = True
while stack:
pos = stack[-1]
if pos == end:
print("Had find last path")
return stack
xPos, yPos = pos
forward = False
if yPos+1 < len(matrix):
if matrix[xPos][yPos+1] ==0:
stack.append((xPos, yPos+1))
matrix[xPos][yPos+1] =2
forward = True
if xPos+1 < len(matrix) :
if matrix[xPos+1][yPos] ==0:
stack.append((xPos+1, yPos))
matrix[xPos+1][yPos] =2
forward = True
if xPos-1 >=0 :
if matrix[xPos-1][yPos] ==0:
stack.append((xPos-1, yPos))
matrix[xPos-1][yPos] =2
forward = True
if yPos-1>=0:
if matrix[xPos][yPos-1] ==0:
stack.append((xPos, yPos-1))
matrix[xPos][yPos-1] =2
forward = True
# bad road
if not forward:
x, y = stack.pop()
matrix[xPos][yPos] = 3
return False
if __name__ == '__main__':
result = dfs_fun(matrix, (0,0), (4,4))
print(result)
python迷宫万花筒代码_利用广度优先遍历搜索迷宫的python源代码相关推荐
- python迷宫万花筒代码_用Python3写一个走迷宫的小程序(图形化:matplotlib,dfs,prim)...
先看一下动态效果图(慢放): 首先生成迷宫: 主要用了两个算法:Prim和dfs 总结:Prim生成的比较像真正的迷宫,所以默认用了Prim生成迷宫 先输入n,m,会生成一个迷宫(prim生成),然后 ...
- python计算面积代码_利用Python求阴影部分的面积实例代码
利用Python求阴影部分的面积实例代码 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: 利用Python求阴影部分的面积实例代码.txt ] (友情提示:右键点 ...
- python做游戏代码_利用Python基础代码语句,实现2G时代文字小游戏,世界如此简单!...
相信许多80,90后都玩过2G时代的文字小游戏,它是来自QQ家园的专属回忆.偷菜,美味小镇,大乐斗,还有精武堂等等,虽然只是文字的输出,但是留给我们这一代的人的印象却是最深刻的.曾经流量很少,响应很快 ...
- python删除异常值代码_利用Python进行异常值分析实例代码
前言 异常值是指样本中的个别值,也称为离群点,其数值明显偏离其余的观测值.常用检测方法3σ原则和箱型图.其中,3σ原则只适用服从正态分布的数据.在3σ原则下,异常值被定义为观察值和平均值的偏差超过3倍 ...
- python人脸检测代码_如何用不到25行Python代码实现人脸检测
本文我们会讲讲怎样利用不到 25 行 Python 代码和开源库 OpenCV,以很简单的方式实现人脸识别. 在正式开始前,先提以下两点小小的建议:先别急着跳到代码部分,最好在前文理解一下代码是干什么 ...
- python数据整理代码_熬夜整理的资料:分享Python数据可视化图表代码和案例给大家...
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 闲话不多说,直接上干货 1华夫饼图 waffle可以使用该pywaffle ...
- python画兔子代码_【后端开发】如何用Python画一只兔子——turtle库circle()画圆函数的详细用法介绍...
周末学习了一下turtle库的基本函数,试着画了一只大耳朵小兔子,灵感来源是jellycat邦尼兔.turtle库中circle()函数用来画弧,但和通常先确定原点,再根据半径.夹角画弧的方法有所不同 ...
- 利用python处理dna序列_利用Python编程提取基因组基因序列
生物技术. DOI: 10.16660/j.cnki.1674-098X.2019.11.141 利用Python编程提取基因组基因序列 ① 庞雪原 张婷婷 (东北农业大学生命科学学院 黑龙江哈尔滨 ...
- 数据结构(廿六) -- C语言版 -- 图 - 图的遍历 -- 邻接表 - 深度/广度优先遍历/搜索(DFS、BFS)
内容预览 零.读前说明 一.深度优先遍历 1.1.深度优先的遍历过程 1.2.深度优先的遍历实现代码 二.广度优先遍历 2.1.广度优先的遍历过程 2.2.广度优先的遍历实现代码 三.源码测试效果 3 ...
最新文章
- 语义分割车道线,来自两篇论文的融合算法
- linux常用指令笔记(1)
- python opencv给证件照换底色
- Okhttp同步请求源码分析
- 结对开发Ⅴ——循环一维数组求和最大的子数组
- 配置映射文件中使用的类的类型别名typeAliases
- Android重拾设计模式系列——简单工厂模式
- Worthington 蛋白质组学/蛋白酶方案
- WPS表格简单入门_我的笔记_一些常用操作
- 【计算机网络】计算机网络的体系结构
- monkey 压力测试 随机
- 智慧果园系统——以水肥一体化系统功能为基础实现智慧果园系统项目 需求文档
- PADS-VX入门到精通实战项目讲解(上)—LOGIC部分-覃小刚-专题视频课程
- 钢七连实战教学 老师和学生的差别
- excel下拉菜单创建
- 打工人抛弃办公室,微软丢掉「Office」
- libvlc获取一帧_android - 从android vlc媒体播放器获取当前帧 - 堆栈内存溢出
- 技术胖的2019新版React全家桶免费视频(84集)
- 计算机专业评副高需要发论文吗,高级职称评审一般都需要几篇论文呢
- 新房装修材料避坑分享