精华内容
下载资源
问答
  • 今天小编就为大家分享一篇Python迷宫生成和迷宫破解算法实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • amaze:Python迷宫-源码

    2021-03-07 00:18:38
    惊奇 Python迷宫
  • python迷宫生成.py

    2018-05-10 19:23:32
    python迷宫生成,可以重复生成迷宫图片,并标出迷宫路径
  • python迷宫小游戏

    2014-08-08 19:15:20
    课余制作的PYTHON迷宫小游戏,提一些建议,谢谢
  • 今天小编就为大家分享一今天小编就为大家分享一篇Python迷宫生成和迷宫破解算法实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 文章目录1迷宫生成1.随机PRIM2.深度优先2.迷宫破解1.填坑法2...
  • # 画地图map_data = [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],[1, 0, 1, 1, 1, 1, 1, 1, 1, 1],[1, 2, 1, 0, 0, 0, 0, 0, 0, 1],[1, 0, 1, 0, 1, 0, 1, 1, 0, 1],[1, 0, 1, 0, 1, 0, 1, 1, 0, 1],[1, 0, 0, 0, 1, 0, 0, 1, ...

    # 画地图

    map_data = [

    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

    [1, 0, 1, 1, 1, 1, 1, 1, 1, 1],

    [1, 2, 1, 0, 0, 0, 0, 0, 0, 1],

    [1, 0, 1, 0, 1, 0, 1, 1, 0, 1],

    [1, 0, 1, 0, 1, 0, 1, 1, 0, 1],

    [1, 0, 0, 0, 1, 0, 0, 1, 0, 1],

    [1, 1, 1, 0, 1, 1, 1, 1, 0, 1],

    [1, 1, 1, 0, 1, 1, 1, 1, 0, 0],

    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

    ]

    # 定义人所在的位置(初始化)

    x = 2

    y = 1

    endx = 7

    endy = 9

    # 用字符串重新给地图赋值

    def print_map():

    for nums in map_data:

    for num in nums:

    if num == 1:

    print(" #",end=" ")

    elif(num == 0):

    print(" ",end=" ")

    else:

    print(" $",end=" ")

    print("")

    # 所用到的核心知识

    # print("交换前的地图")

    # print_map()

    # map_data[2][1], map_data[2+1][1] = map_data[2+1][1], map_data[2][1]

    # print("交换后的地图")

    # print_map()

    # 先画地图

    print_map()

    while True:

    # 指令的输入

    order = input("请输入指令(a: 左,s: 下, d: 右, w: 上):")

    # 对用户输入的指令进行判断

    # 当用户输入a时执行向左走进行交换(列变行不变 列下标减1)

    if order == "a":

    y = y-1

    # 碰到墙,游戏结束

    if map_data[x][y] == 1:

    print("游戏结束")

    break

    else:

    map_data[x][y],map_data[x][y+1] = map_data[x][y+1], map_data[x][y] # 进行交换操作

    print_map()

    # 当用户输入s时执行向下走进行交换(列不变行变 行下标加1)

    elif order == "s":

    x = x + 1

    if map_data[x][y] == 1:

    print("游戏结束")

    break

    else:

    map_data[x][y], map_data[x-1][y] = map_data[x-1][y], map_data[x][y] # 进行交换操作

    print_map()

    # 当用户输入d时执行向右走进行交换(列变行不变 列下标加1)

    elif order == "d":

    y = y + 1

    if map_data[x][y] == 1:

    print("游戏结束")

    break

    else:

    map_data[x][y], map_data[x][y - 1] = map_data[x][y - 1], map_data[x][y] # 进行交换操作

    print_map()

    if map_data[x][y] == map_data[endx][endy]:

    print("恭喜你过关了")

    break

    # 当用户输入w时执行向上走进行交换(列不变行变 行下标减1)

    elif order == "w":

    x = x - 1

    if map_data[x][y] == 1:

    print("游戏结束")

    break

    else:

    map_data[x][y], map_data[x + 1][y] = map_data[x + 1][y], map_data[x][y] # 进行交换操作

    print_map()

    # 当用户输入非规则内的指令时的错误提示,并重新输入

    else:

    print("您输入指令有误,请重新按指令规则输入!")

    continue

    #

    截图:

    1302991-20180404212346847-1502890690.png

    展开全文
  • Python 迷宫算法

    千次阅读 2018-05-31 13:04:52
    Python迷宫,几个核心代码如下: 1、创建迷宫,自定义【0】为【墙】,【1】为【路】,先创建外墙,再创建内墙 # show the maze or the path ______________________________________________________________...

    步骤

    1、创建迷宫

    定义【0】为【墙】,【1】为【路】,先创建外墙,再创建内墙

    # outer wall
    maze=[[0,0,0,0,0,0],
          [0,1,1,1,1,0],
          [0,1,1,1,1,0],
          [0,1,1,1,1,0],
          [0,1,1,1,1,0],
          [0,0,0,0,0,0]]
    # inner wall
    maze[2][1]=maze[1][3]=maze[2][3]=maze[3][3]=0
    

    这里写图片描述

    2、寻路

    • 列表path记录路线
    • 列表footprint记录已经走过的路(以免重复)
    • steps表示上下左右4个可行方向
    • 起点:x=1 y=1
    # the way out of maze
    path=[(1,1)]
    # never again
    footprint=[]
    # right down left up
    steps=((0,1),(1,0),(0,-1),(-1,0))
    # entrance
    x=y=1
    
    • 终点:x=4 y=4
    if 下一步(没有墙 & 没走过):
    记录下一步 & 进入下一步
    else:
    返回上一步
    • path[-1]表示当前位置
    while x!=4 or y!=4:
        # horizontal vertical
        for h,v in steps:
            if maze[x+h][y+v]==' ' and (x+h,y+v) not in footprint:
                path.append((x+h,y+v))
                footprint.append((x+h,y+v))
                break
        else:
            path.pop()
        # location
        x,y=path[-1]
    

    3、绘制迷宫和路由

    import random
    # show the maze or the path
    def show_maze(maze):
        for i in maze:
            for j in i:
                if j==0:
                    print('\033[36m',j,sep='',end=' \033[0m')
                elif j=='+':
                    print('\033[31m',j,sep='',end=' \033[0m')
                elif j=='O':
                    print('\033[33m',j,sep='',end=' \033[0m')
                else:
                    print(j,end=' ')
            print()
    # build a maze which the size of maze is [n]
    def build_maze(n):
        maze=[]
        # outer wall
        for i in range(n+2):
            if i==0:
                maze.append(['O']+[0]*(n+1))
            elif i==n+1:
                maze.append([0]*(n+1)+['O'])
            else:
                maze.append([0]+[' ']*n+[0])
        # random inner wall
        for i in range(1,n+1):
            if i==1:
                for j in range(n//4):
                    maze[i][random.randint(2,n-1)]=0
            elif i==n:
                for j in range(n//4):
                    maze[i][random.randint(1,n-2)]=0
            else:
                for j in range(n//4):
                    maze[i][random.randint(1,n-1)]=0
        show_maze(maze)
        return maze
    # find the exit of the maze
    def route():
        maze=build_maze(9)
        # the way out of maze
        path=[(1,1)]
        # never again
        footprint=[]
        # right down left up
        steps=((0,1),(1,0),(0,-1),(-1,0))
        # entrance
        x=y=1
        while x!=9 or y!=9:
            # horizontal vertical
            for h,v in steps:
                if maze[x+h][y+v]==' ' and (x+h,y+v) not in footprint:
                    path.append((x+h,y+v))
                    footprint.append((x+h,y+v))
                    break
            else:
                path.pop()
            # location
            x,y=path[-1]
        # show the maze and the path
        for x,y in path:
            maze[x][y]='+'
        show_maze(maze)
    # play
    route()
    

    在这里插入图片描述

    完整版

    random迷宫,3种路由

    # rectangle maze
    import random,math,copy
    # show the maze or the path
    def show_maze(maze):
        for i in maze:
            for j in i:
                if j=='0':  # wall
                    print('\033[36m',j,sep='',end='\033[0m')
                elif j=='O':  # [ entrance & exit ]& path
                    print('\033[33m',j,sep='',end='\033[0m')
                elif j=='X':  # footprint
                    print('\033[31m',j,sep='',end='\033[0m')
                else:
                    print(j,end='')
            print()
    # build a maze which the size of maze is [ n * 10n ]
    def build_maze(n):
        maze = []
        # wall
        w='0'
        # entrance & exit
        e='O'
        # outer wall
        for i in range(n+2):
            if i==0:
                maze.append([e]+[w]*(n*10+1))
            elif i==n+1:
                maze.append([w]*(n*10+1)+[e])
            else:
                maze.append([w]+[' ']*n*10+[w])
        # random inner wall
        for i in range(1,n+1):
            atan=math.atan(n)
            balance=math.floor(atan**(atan**(atan+0.5)+0.5))*n
            if i==1:
                for j in range(balance):
                    maze[i][random.randint(2,n*10-1)]=w
            elif i==n:
                for j in range(balance):
                    maze[i][random.randint(1,n*10-2)]=w
            else:
                for j in range(balance):
                    maze[i][random.randint(1,n*10-1)]=w
        show_maze(maze)
        return maze
    # route optimization
    def optimize(path):
        # anterior step, next step, posterior step
        anterior=0
        while anterior<len(path):
            x,y=path[anterior]
            next_step=[(x,y-1),(x-1,y),(x,y+1),(x+1,y)]
            for posterior in range(len(path)-1,anterior+1,-1):
                if path[posterior] in next_step:
                    del path[anterior+1:posterior]
                    break
            anterior+=1
    # find the exit of the maze
    def route(maze,n,option=0):
        if option==0:
            # right down up left
            steps=((0,1),(1,0),(-1,0),(0,-1))
        elif option==1:
            # right up down left
            steps=((0,1),(-1,0),(1,0),(0,-1))
        else:
            # left up down right
            steps=((0,-1),(-1,0),(1,0),(0,1))
        # the way out of maze
        path=[(1,1)]
        # never again
        footprint=[]
        # entrance
        x=y=1
        while x!=n or y!=n*10:
            # horizontal vertical
            for h,v in steps:
                if maze[x+h][y+v]==' ' and (x+h,y+v) not in footprint:
                    path.append((x+h,y+v))
                    footprint.append((x+h,y+v))
                    break
            else:
                if path:
                    path.pop()
                else:
                    # There is no escape. show the maze and footprint
                    for x,y in footprint:
                        maze[x][y]='X'
                    show_maze(maze)
                    break
            # location
            if path:
                x,y=path[-1]
        else:
            # show the maze, footprint and path
            for x,y in footprint:
                maze[x][y]='X'
            # optimize the path of maze
            optimize(path)
            for x,y in path:
                maze[x][y]='O'
            show_maze(maze)
    # play
    while True:
        n=input('the size of maze:').strip()
        if n.isdigit() and n!='0':
            n=int(n)
        else:
            n=19
        maze0=build_maze(n)
        maze1=copy.deepcopy(maze0)
        maze2=copy.deepcopy(maze0)
        input('Press any key to continue.')
        route(maze0,n)
        input('Press any key to continue.')
        route(maze1,n,1)
        input('Press any key to continue.')
        route(maze2,n,2)
    

    在这里插入图片描述

    展开全文
  • I am trying to make a maze solver, and it is working except that instead of the path being marked by "o" I want it to be marked with ">", "def solve(self,x,y):maze = self.maze#Base caseif y >...

    I am trying to make a maze solver, and it is working except that instead of the path being marked by "o" I want it to be marked with ">", "

    def solve(self,x,y):

    maze = self.maze

    #Base case

    if y > len(maze) or x > len(maze[y]):

    return False

    if maze[y][x] == "E":

    return True

    if maze[y][x] != " ":

    return False

    #marking

    maze[y][x] = "o"

    #recursive case

    if self.solve(x+1,y) == True : #right

    return True

    if self.solve(x,y+1) == True : #down

    return True

    if self.solve(x-1,y) == True : #left

    return True

    if self.solve(x,y-1) == True : #up

    return True

    #Backtracking

    maze[y][x] = " "

    return False

    This is an example of an unsolved maze:

    ####################################

    #S# ## ######## # # # # #

    # # # # # # #

    # # ##### ## ###### # ####### # #

    ### # ## ## # # # #### #

    # # # ####### # ### #E#

    ####################################

    And this is the solved version of the same maze using the code above:

    ####################################

    #S# ## ######## # #oooooo# ooo# #

    #o#ooo# oooo #o# ooooo#ooo#

    #ooo#o#####o##o######o# ####### #o#

    ### #o##oooo##oooooo#o# # ####o#

    # #oooo# #######ooo# ### #E#

    ####################################

    The result that I want to get to is:

    ####################################

    #S# ## ######## # #>>>>>v# ^>v# #

    #v#^>v# >>>v #^# >>>>^#>>v#

    #>>^#v#####^##v######^# ####### #v#

    ### #v##^>>^##>>>>>v#^# # ####v#

    # #>>>^# #######>>^# ### #E#

    ####################################

    How is it possible to do this?

    解决方案#marking

    maze[y][x] = "o"

    #recursive case

    if self.solve(x+1,y) == True : #right

    maze[y][x] = ">"

    return True

    if self.solve(x,y+1) == True : #down

    maze[y][x] = "v"

    return True

    ...

    From Lix example. You need to uncomment maze[y][x] = "o", you need that row to prevent the node from being revisited

    展开全文
  • 迷宫求解器 原来的 正在搜寻... 解决了 用法 有一个python脚本可以解析输入图像,并输出具有找到路径的解析图像。 另外,如果您想生成该过程的GIF或MP4,则可以使用Shell脚本。 解决并输出图像 $ python3 solve.py ...
  • python迷宫小程序

    2014-06-05 22:43:12
    一个很简单的python程序,对于入门可以看一看
  • python迷宫问题深度优先

    千次阅读 多人点赞 2021-06-13 23:36:17
    一、迷宫介绍 用python迷宫问题,迷宫是一个二维列表,本次用深度优先解开迷宫问题。定义起点和终点,从一个位置到下一个位置只能通过向上或下或左或右,走一步来实现,从起点出发,如何找到一条到达终点的通路。 ...

    一、迷宫介绍

    用python解迷宫问题,迷宫是一个二维列表,本次用深度优先解开迷宫问题。定义起点和终点,从一个位置到下一个位置只能通过向上或下或左或右,走一步来实现,从起点出发,如何找到一条到达终点的通路。

    二、深度优先遍历

    简单那我们的案例来讲就是,随便选择一条路,一直走,走不动了,再回头重新选择新的路

    # 1 为墙,0 为路
    maze = [
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
        [1, 0, 1, 1, 0, 0, 0, 1, 1, 1],
        [1, 0, 1, 1, 1, 1, 0, 0, 1, 1],
        [1, 0, 1, 0, 0, 0, 0, 0, 1, 1],
        [1, 0, 1, 0, 1, 1, 1, 1, 1, 1],
        [1, 0, 0, 0, 1, 1, 1, 1, 1, 1],
        [1, 1, 1, 0, 0, 0, 0, 1, 1, 1],
        [1, 1, 1, 0, 0, 1, 0, 1, 1, 1],
        [1, 1, 1, 1, 1, 1, 0, 0, 0, 1],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
    ]
    

    首先我们先设置一个起点和终点

    start = (1, 1)
    end = (8, 8)
    

    判断当前这个点,0就是路可以走,1为墙不能走
    对于一个点的下一个点的坐标准说明:

    • 上走:r - 1, c
    • 下走:r + 1, c
    • 左走:r, c - 1
    • 右走:r, c + 1

    那我们这个迷宫的某个一个点达到了不能走的地步了,就是死胡同了,它就得原路返回

    这时我们就有一个概念,就是,栈的思想就是:先进后出

    怎么理解呢,可以举一个小例子,就是食堂阿姨,每天早上蒸包子,他是一层一层放蒸笼
    那放到最后,学生来吃包子,她是从上往往外拿,最上面就是最后放的,最下面是最先放的,所以就叫做先进后出

    其实list就是一个栈,比如我们放一个空列表,然后我们用这个列表直接append

    再用pop进行取出,就会取到append的最后一个元素

    # 定义列表,列表里面放的就是每一步走的坐标,[r, c]
    # 第一步就是起始位置,也就是start
    list01 = [start]
    

    走过的路定义为2

    row, col = now
    # python 里的解构也叫解包 now包括两个位置,一个行,一个列
    maze[row][col] = 2
    # 这个代表就是走过的点,为2,因为你走过的路是不能再走的,除了走不通返回的时候,也是为了走不通按原来走过的路原路返回 
    

    核心代码:

    if maze[row - 1][col] == 0:
        # 上方可以走
        list01.append((row - 1, col))
        continue
    elif maze[row][col + 1] == 0:
        # 右方可以走
        list01.append((row, col + 1))
        continue
    elif maze[row + 1][col] == 0:
        # 下方可以走
        list01.append((row + 1, col))
        continue
    elif maze[row][col - 1] == 0:
        # 左方可以走
        list01.append((row, col - 1))
        continue
    

    最终代码,可以运行一下试试:

    maze = [
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
        [1, 0, 1, 1, 0, 0, 0, 1, 1, 1],
        [1, 0, 1, 1, 1, 1, 0, 0, 1, 1],
        [1, 0, 1, 0, 0, 0, 0, 0, 1, 1],
        [1, 0, 1, 0, 1, 1, 1, 1, 1, 1],
        [1, 0, 0, 0, 1, 1, 1, 1, 1, 1],
        [1, 1, 1, 0, 0, 0, 0, 1, 1, 1],
        [1, 1, 1, 0, 0, 1, 0, 1, 1, 1],
        [1, 1, 1, 1, 1, 1, 0, 0, 0, 1],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
    ]
    
    start = (1, 1)
    end = (8, 8)
    
    # 定义列表,列表里面放的就是每一步走的坐标,[r, c]
    # 第一步就是起始位置,也就是start
    list01 = [start]
    
    # 定义循环,让它走
    # 列表里最后存的就是下一步走的地方,当前列表有东西才能继续走
    while list01:
        # 当前走到的节点是哪一个节点,也就是最后走的一步,是哪一步,去列表的最后的一个值就是索引-1
        now = list01[-1]
        if now == end:  # 如果现在的now等于我们之前定义的终点end
            print(list01)
            print("出来了")
            break
        row, col = now
        # python 里的解构也叫解包 now包括两个位置,一个行,一个列
        maze[row][col] = 2
        # 这个代表就是走过的点,为2,因为你走过的路是不能再走的,除了走不通返回的时候,也就是为了走不通按原来走过的路原路返回
    
    	# continue 结束本次循环,从新开始判断走路
        if maze[row - 1][col] == 0:
            # 上方可以走
            list01.append((row - 1, col))
            continue
        elif maze[row][col + 1] == 0:
            # 右方可以走
            list01.append((row, col + 1))
            continue
        elif maze[row + 1][col] == 0:
            # 下方可以走
            list01.append((row + 1, col))
            continue
        elif maze[row][col - 1] == 0:
            # 左方可以走
            list01.append((row, col - 1))
            continue
        else: # 走不通过,直接循环干掉每一步,重新调整路线
            list01.pop()
    
    else:
        print("这个迷宫走不通")
    
    

    欢迎您的观看,请不要吝啬您的三连呀,我在这里谢谢您啦!!!

    展开全文
  • 迷宫寻路问题,通过深度优先,广度优先,astar算法 求解问题
  • python 迷宫生成路线

    2019-10-03 10:06:54
    /usr/bin/python # -*- coding: UTF-8 -*- import random import sys import os import time import turtle turtle.screensize(800,600, "seashell") turtle.pensize(16) turtle.pencolor('tomato') points = ...
  • python 迷宫问题

    2019-06-27 23:44:00
    用队列实现迷宫问题——深度优先搜索 """ queue = deque() # 创建队列 queue.append((x1, y1, - 1 )) # 加入起点,第三个参数是记录时谁让它来的,这里起始点设置为- 1 path = [] # 保存出队节点 while ...
  • 一看就懂的,Python迷宫小游戏教程

    千次阅读 多人点赞 2019-10-13 17:30:02
    Python写一个迷宫游戏(含代码)前言开发工具参考资料(谢谢各位大牛的资料,没有你们的无私贡献我根本写不出来)Python第三方模块库安装开发第一步插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,969
精华内容 1,987
关键字:

python迷宫

python 订阅