博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用广度优先遍历搜索迷宫的python源代码
阅读量:4584 次
发布时间:2019-06-09

本文共 1387 字,大约阅读时间需要 4 分钟。

广度优先遍历简称为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)

转载于:https://www.cnblogs.com/feiyuntaoist/p/8872235.html

你可能感兴趣的文章
实现斐波那契神兔
查看>>
【linux就该这么学】-08
查看>>
JavaScript基础知识汇总
查看>>
PyQt4网格布局
查看>>
PHP学习笔记 - 进阶篇(3)
查看>>
极角排序那些事
查看>>
Ganglia+nagios 监控hadoop资源与报警
查看>>
博客园主题样式修改教程
查看>>
TextView实现多个TextView对象的走马灯效果
查看>>
感悟成功
查看>>
学员管理示例:Ajax删除学生
查看>>
线程组和未处理的异常
查看>>
Oracle管理监控之为11g asm磁盘组添加磁盘
查看>>
javasrcipt中的for in 循环
查看>>
ThetaSome_ThetaAll子查询
查看>>
git命令的使用 【备用】
查看>>
uva1391 2-SAT 问题
查看>>
冲刺2-4
查看>>
关于写博
查看>>
每日五题(随记)
查看>>