栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python求解迷宫问题,配js实现的走迷宫动画,动起来才有意思~

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python求解迷宫问题,配js实现的走迷宫动画,动起来才有意思~

前言

继昨天手动实现了走迷宫问题,虽然是实现了,但是看到被我画成乱七八糟的草稿纸,总是觉得不爽,不仔细看,又得把自己给走迷糊了,于是自己使用js实现了一下,效果还不错!先看一下展示效果吧!(文末配有js实现的代码)

js实现走迷宫

不同的小方块代表不同的颜色,白色代表未走过的路,灰色代表墙,绿色代表走过的路,红色代表这条路走不通,即“死路”一条~

最后的截图:

言归正传说说具体的思路吧~

核心思想就是:我头铁,我就要一步一步的试!直到杀出一条血路出来,不,不,是试出一条汗路来,(所以悄悄告诉你,这个方法的效率有点低哦)

归纳总结一下,其实也就分两步走! 第一步——“四面楚歌”

 为什么叫四面楚歌呢?就拿现在的这个局面给你说,你看上有吕布,下有阿珂,前有虞姬,后有个啥(我也看不清了),要想杀出个血路,你会怎么办?那不得先拿菜鸡开刀嘛,你看这个吕布(上),别看它块头大,实际行动起来憨头憨老的,所以必须先拿他开刀,再看这个阿珂,虽然看她是满血,但是我就是头铁,我就是要拿她开刀,所以第二我会选她(下),其他的就留给你们自己挑吧!

 杀不出去怎么办? ---------------------------------------等死嘛?

不,你要相信,你就是光,上帝会伸出援助之手的!

                你看!上帝让你重生了!考虑到你比较菜,上帝没有让你在原地复活,而是让你回到了上一步,并且为了不让你再走回头路,给你标记了你死亡的地点,希望你不要再误入迷途了,阿弥陀佛~

 第二步——“经历99八十一难,终得正果!”

不管你挂了多少次,不管上帝又让你复活了多少次,你从不觉疲倦,依旧任劳任怨,直到取得真经,修成正果的那一天!!!阿弥陀佛~

直到有一天,上帝也看不下去了。。。

他说:阿空,我看你为取得真经,虽历经千幸万苦,但你始终不忘初心,砥砺前行,实数让我感动,现在我给你两条路,一条路是通往真经的路,一条路是通往地狱的,能不能取得真经,就看你自己的造化了。

阿空会不会取得真经呢?

——预知后事如何,还得等您亲自操刀!源码如下:

 

求解迷宫的源码:
# -*- coding: UTF-8 -*-
'''
   *****************LLL*********************
   * @Project :leetcode                       
   * @File    :lll84_迷宫求解.py                  
   * @IDE     :PyCharm             
   * @Author  :LLL                         
   * @Date    :2022/5/11 19:45             
   *****************************************
'''

# 迷宫
maze = [
    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
    [1, 0, 1, 1, 0, 1, 1, 0, 1, 1],
    [1, 0, 0, 0, 0, 0, 1, 0, 0, 1],
    [1, 0, 0, 1, 1, 0, 1, 0, 1, 1],
    [1, 1, 0, 1, 1, 0, 1, 0, 1, 1],
    [1, 0, 0, 1, 0, 0, 1, 0, 0, 1],
    [1, 0, 0, 1, 1, 0, 1, 0, 0, 1],
    [1, 0, 0, 0, 0, 0, 0, 0, 0, 1],
    [1, 0, 0, 1, 0, 1, 1, 1, 0, 1],
    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

]

# 定义移动规则
steps = {
    0: lambda x, y: (x, y - 1),  # 上
    1: lambda x, y: (x, y + 1),  # 下
    2: lambda x, y: (x - 1, y),  # 左
    3: lambda x, y: (x + 1, y)  # 右
}


def maze_path(x1, y1, x2, y2):
    stack = [(x1, y1)]  # 起始点放入栈中
    while stack:
        # 取出栈顶元素
        cur_pos = stack[-1]
        steps_li.append([*cur_pos, maze[cur_pos[0]][cur_pos[1]]])
        if cur_pos == (x2, y2):
            steps_li.append([*cur_pos, 2])
            return stack

        # 试探下一步
        for i in range(4):
            next_x, next_y = steps[i](*cur_pos)
            if maze[next_x][next_y] == 0:
                maze[cur_pos[0]][cur_pos[1]] = 2  # 将走过的路标记为2
                steps_li.append([*cur_pos, maze[cur_pos[0]][cur_pos[1]]])

                cur_pos = (next_x, next_y)
                stack.append(cur_pos)
                break
        else:
            # 回退
            stack.pop()
            maze[cur_pos[0]][cur_pos[1]] = 'x'  # 标记此处不可走
            steps_li.append([*cur_pos, maze[cur_pos[0]][cur_pos[1]]])

    return stack


if __name__ == '__main__':
    steps_li = []
    path = maze_path(1, 1, 8, 8)
    print(path)  # 走出迷宫的路
    print(steps_li)  # 走过的所有的路
js实现动画的源码:

 




    
    迷宫
    
    

    




    未走
    墙
    已走
    死路





 同步更新于个人博客系统:python求解迷宫问题,配js实现的走迷宫动画,动起来才有意思~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/874926.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号