经典的编程问题(23)走迷宫--真人的解法

本文介绍了如何解决走迷宫的问题,提出了一种策略:始终向右、向前、向左、向后尝试,遵循逆时针方向找寻通路。通过深度优先遍历的方法,分析了在无工具且只存在墙和转角的真实迷宫中寻找出口的过程。文章提供了代码示例,并提示该策略可能存在的问题,如出口位于迷宫中间时,可能会走回入口。最后,鼓励读者通过视频更直观理解解题过程。
摘要由CSDN通过智能技术生成

问题

迷宫
A是入口
B是出口
#是墙
.是通路
比如如下的迷宫:

A##############
.######.....###
.######.###...#
........###.###
#.##.##########
#.##.####....##
#.##.####.##.##
#.##.####.##.##
#.##......##.##
#.##########.##
#.....####...##
##########....B

分析

经典的迷宫解法是 深度优先遍历(dfs)广度优先遍历(bfs)
还有并发解法等许多,请自行百度之…
但现在
假设你被放入一个真的迷宫入口。
里边只有一摸一样的墙和转角
你没有携带任何工具
请问如何找到出口

有一种策略是这样的。
无论你在何处,始终遵循如下原则:
首先看能否向右走,如不能就试试向前走,
还是不行。。。。
那就试试向左,最后才试试向后。
也就是说,当别无选择的时候才退回来时的路
简要地说:
从当前朝向的右边开始,逆时针试探通路

最后只有两种结果
要么,走到了出口
要么,走回了来时的入口

代码

定义一个list代表迷宫,也就是说用一维结构表达二维结构
其换算关系很简单:
行号 = p // 宽度
列号 = p % 宽度
p = 行号 * M + 列号
定义 4 个函数 f1 f2 f3 f4
分别表示向右,向上,向左,向下
dr = [f1, f2, f3, f4] 这个方向数组代表了它们的逆时针关系

# 走迷宫问题
puz = '''
A##############
.######.....###
.######.###...#
........###.###
#.##.##########
#.##.####....##
#.##.####.##.##
#.##.####.##.##
#.##......##.##
#.##########.##
#.....####...##
##########....B
'''
puz = list(puz.replace('\n',''))
M = 15  # 宽度
N = 12  # 高度

def mi(puz, M
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值