广度优先遍历简称为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源代码相关推荐

  1. python迷宫万花筒代码_用Python3写一个走迷宫的小程序(图形化:matplotlib,dfs,prim)...

    先看一下动态效果图(慢放): 首先生成迷宫: 主要用了两个算法:Prim和dfs 总结:Prim生成的比较像真正的迷宫,所以默认用了Prim生成迷宫 先输入n,m,会生成一个迷宫(prim生成),然后 ...

  2. python计算面积代码_利用Python求阴影部分的面积实例代码

    利用Python求阴影部分的面积实例代码 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  利用Python求阴影部分的面积实例代码.txt ] (友情提示:右键点 ...

  3. python做游戏代码_利用Python基础代码语句,实现2G时代文字小游戏,世界如此简单!...

    相信许多80,90后都玩过2G时代的文字小游戏,它是来自QQ家园的专属回忆.偷菜,美味小镇,大乐斗,还有精武堂等等,虽然只是文字的输出,但是留给我们这一代的人的印象却是最深刻的.曾经流量很少,响应很快 ...

  4. python删除异常值代码_利用Python进行异常值分析实例代码

    前言 异常值是指样本中的个别值,也称为离群点,其数值明显偏离其余的观测值.常用检测方法3σ原则和箱型图.其中,3σ原则只适用服从正态分布的数据.在3σ原则下,异常值被定义为观察值和平均值的偏差超过3倍 ...

  5. python人脸检测代码_如何用不到25行Python代码实现人脸检测

    本文我们会讲讲怎样利用不到 25 行 Python 代码和开源库 OpenCV,以很简单的方式实现人脸识别. 在正式开始前,先提以下两点小小的建议:先别急着跳到代码部分,最好在前文理解一下代码是干什么 ...

  6. python数据整理代码_熬夜整理的资料:分享Python数据可视化图表代码和案例给大家...

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 闲话不多说,直接上干货 1华夫饼图 waffle可以使用该pywaffle ...

  7. python画兔子代码_【后端开发】如何用Python画一只兔子——turtle库circle()画圆函数的详细用法介绍...

    周末学习了一下turtle库的基本函数,试着画了一只大耳朵小兔子,灵感来源是jellycat邦尼兔.turtle库中circle()函数用来画弧,但和通常先确定原点,再根据半径.夹角画弧的方法有所不同 ...

  8. 利用python处理dna序列_利用Python编程提取基因组基因序列

    生物技术. DOI: 10.16660/j.cnki.1674-098X.2019.11.141 利用Python编程提取基因组基因序列 ① 庞雪原 张婷婷 (东北农业大学生命科学学院 黑龙江哈尔滨 ...

  9. 数据结构(廿六) -- C语言版 -- 图 - 图的遍历 -- 邻接表 - 深度/广度优先遍历/搜索(DFS、BFS)

    内容预览 零.读前说明 一.深度优先遍历 1.1.深度优先的遍历过程 1.2.深度优先的遍历实现代码 二.广度优先遍历 2.1.广度优先的遍历过程 2.2.广度优先的遍历实现代码 三.源码测试效果 3 ...

最新文章

  1. 语义分割车道线,来自两篇论文的融合算法
  2. linux常用指令笔记(1)
  3. python opencv给证件照换底色
  4. Okhttp同步请求源码分析
  5. 结对开发Ⅴ——循环一维数组求和最大的子数组
  6. 配置映射文件中使用的类的类型别名typeAliases
  7. Android重拾设计模式系列——简单工厂模式
  8. Worthington 蛋白质组学/蛋白酶方案
  9. WPS表格简单入门_我的笔记_一些常用操作
  10. 【计算机网络】计算机网络的体系结构
  11. monkey 压力测试 随机
  12. 智慧果园系统——以水肥一体化系统功能为基础实现智慧果园系统项目 需求文档
  13. PADS-VX入门到精通实战项目讲解(上)—LOGIC部分-覃小刚-专题视频课程
  14. 钢七连实战教学  老师和学生的差别
  15. excel下拉菜单创建
  16. 打工人抛弃办公室,微软丢掉「Office」
  17. libvlc获取一帧_android - 从android vlc媒体播放器获取当前帧 - 堆栈内存溢出
  18. 技术胖的2019新版React全家桶免费视频(84集)
  19. 计算机专业评副高需要发论文吗,高级职称评审一般都需要几篇论文呢
  20. 新房装修材料避坑分享

热门文章

  1. Maya阿诺德室外环境灯光照明和渲染技术学习视频教程
  2. ubuntu 大小写指示的小工具
  3. MVC、MVP、MVVM
  4. 源码-0205-02--聊天布局
  5. 新生 语不惊人死不休 —— 《无限恐怖》读后有感
  6. BZOJ-1005 明明的烦恼
  7. ref与out的区别
  8. 【译文转帖】用C#写COM组件 Building COM Objects in C#
  9. 在ASP.NET中跟踪和恢复大文件下载
  10. [转]mysql性能的检查和调优方法