蓝桥云课——迷宫 Python (广度优先遍历)

文章讲述了使用BFS解决经典迷宫问题的算法思路,通过广度优先搜索遍历迷宫,遇到符合条件的节点进行扩展,并用Python代码展示了具体实现过程。同时提到了DFS的使用场景。
摘要由CSDN通过智能技术生成

 题目地址:迷宫

        一道经典的BFS,什么是DFS什么是BFS就不多说了,站内有很多好文章,本人也是算法初学者,只能凭借他人的思路和代码来形成自己的知识结构体系。:(

狠狠滴套模板!(具体情况还是要具体分析):

def Bfs(参数):
    while quene:  # 空?
        cur = quene.pop(0)  # 弹出队列第一项
        for code in code周围结点:
            if 符合条件:
                代码段
            else:
                return

完整ac代码:

maze = [
                  "01010101001011001001010110010110100100001000101010",
                  "00001000100000101010010000100000001001100110100101",
                  "01111011010010001000001101001011100011000000010000",
                  "01000000001010100011010000101000001010101011001011",
                  "00011111000000101000010010100010100000101100000000",
                  "11001000110101000010101100011010011010101011110111",
                  "00011011010101001001001010000001000101001110000000",
                  "10100000101000100110101010111110011000010000111010",
                  "00111000001010100001100010000001000101001100001001",
                  "11000110100001110010001001010101010101010001101000",
                  "00010000100100000101001010101110100010101010000101",
                  "11100100101001001000010000010101010100100100010100",
                  "00000010000000101011001111010001100000101010100011",
                  "10101010011100001000011000010110011110110100001000",
                  "10101010100001101010100101000010100000111011101001",
                  "10000000101100010000101100101101001011100000000100",
                  "10101001000000010100100001000100000100011110101001",
                  "00101001010101101001010100011010101101110000110101",
                  "11001010000100001100000010100101000001000111000010",
                  "00001000110000110101101000000100101001001000011101",
                  "10100101000101000000001110110010110101101010100001",
                  "00101000010000110101010000100010001001000100010101",
                  "10100001000110010001000010101001010101011111010010",
                  "00000100101000000110010100101001000001000000000010",
                  "11010000001001110111001001000011101001011011101000",
                  "00000110100010001000100000001000011101000000110011",
                  "10101000101000100010001111100010101001010000001000",
                  "10000010100101001010110000000100101010001011101000",
                  "00111100001000010000000110111000000001000000001011",
                  "10000001100111010111010001000110111010101101111000"]

arr = [[0] * 50 for _ in range(30)]  # 记录走过的点


def BFS(x, y):
    quene = [[x, y, '']]  # 设置队列,bfs用队列,dfs用栈
    while quene:
        x, y, ans = quene.pop(0)
        if x > 29 or y > 49 or x < 0 or y < 0 or arr[x][y] == 1 or maze[x][y] == '1':  # 判断边界
# 注意要是字符串'1'
            continue
        else:  
            arr[x][y] = 1  # 证明已经来过了
            quene.append([x + 1, y, ans + 'D'])  # 根据题目所给的顺序进行append到末尾
            quene.append([x, y - 1, ans + 'L'])
            quene.append([x, y + 1, ans + 'R'])
            quene.append([x - 1, y, ans + 'U'])
        if x == 29 and y == 49:
            return ans


print(BFS(0, 0))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值