python迷宫万花筒代码_用Python3写一个走迷宫的小程序(图形化:matplotlib,dfs,prim)...

先看一下动态效果图(慢放):

179708467_1_20200106125047113

首先生成迷宫:

主要用了两个算法:Prim和dfs

总结:Prim生成的比较像真正的迷宫,所以默认用了Prim生成迷宫

先输入n,m,会生成一个迷宫(prim生成),然后会动态的走完整个迷宫。

179708467_2_20200106125047738

179708467_3_20200106125047894

走迷宫用的是bfs算法,具体不多说了,关键难点在于记录路径:

我是用一个path二维数组来记录路径的,每一个位置存的是这个位置的上一个位置,在输出的时候倒着从最后一个点回溯到第一个点存入一个栈,最后正常出栈就是路径了。

画路径:有上,下,左,右,上左,上右,下左,下右,左下,左上,右上,右下12中情况分类讨论(实在是太麻烦了)。

179708467_4_20200106125048425

最后用pyinstaller生成exe

///全部代码:

import random

import numpy as np

from matplotlib import pyplot as plt

import matplotlib.cm as cm

from collections import deque

import tkinter

#显示地图(图形化显示)

def show_maze(Maze):

plt.imshow(Maze, cmap=cm.Wistia_r, interpolation='none')

# plt.ion()

plt.show()

#用bfs查找路径

def find_path_bfs(image, M):

path = np.zeros((num_rows, num_cols, 2))

vis = np.zeros((num_rows, num_cols))

vis[0][0] = 1

Queue = deque()

Queue.append((0, 0))

while(Queue):

temp = Queue.popleft()

nr = temp[0]

nc = temp[1]

if (nc == num_cols - 1) and (nr == num_rows - 1):

show_path(image, path)

break

if (nc > 0) and (not vis[nr][nc - 1]) and (M[nr][nc][0]):

vis[nr][nc] = 1

Queue.append((nr, nc - 1))

path[nr][nc - 1][0] = nr

path[nr][nc - 1][1] = nc

if (nr > 0) and (not vis[nr - 1][nc]) and (M[nr][nc][1]):

vis[nr][nc] = 1

Queue.append((nr - 1, nc))

path[nr - 1][nc][0] = nr

path[nr - 1][nc][1] = nc

if (nc < num_cols - 1) and (not vis[nr][nc + 1]) and (M[nr][nc][2]):

vis[nr][nc] = 1

Queue.append((nr, nc + 1))

path[nr][nc + 1][0] = nr

path[nr][nc + 1][1] = nc

if (nr < num_rows - 1) and (not vis[nr + 1][nc]) and (M[nr][nc][3]):

vis[nr][nc] = 1

Queue.append((nr + 1, nc))

path[nr + 1][nc][0] = nr

path[nr + 1][nc][1] = nc

#prim算法生成地图

def C

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值