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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值