Python 消除交叉点解迷宫

Python 消除交叉点解迷宫,python,numpy,matplotlib,maze,Python,Numpy,Matplotlib,Maze,我们正试图制作一个程序,通过识别所有的连接点并消除那些不通向入口的连接点来解决任何迷宫。我们成功地创建了这样一个程序,但我们正在努力让这些点连接起来,以创建一条正确的路径。有没有人知道怎么做,因为我们没有线索 迷宫基本上是一个(n)x(n)网格,在一个numpy数组中,有墙(真)和路径(假)参见: 将numpy导入为np 以mu形式导入maze_utils 将matplotlib.pyplot作为plt导入 尺寸=101 迷宫,开始=mu.make_迷宫(大小) 开始=[开始[1],开始[0]]

我们正试图制作一个程序,通过识别所有的连接点并消除那些不通向入口的连接点来解决任何迷宫。我们成功地创建了这样一个程序,但我们正在努力让这些点连接起来,以创建一条正确的路径。有没有人知道怎么做,因为我们没有线索

迷宫基本上是一个(n)x(n)网格,在一个numpy数组中,有墙(真)和路径(假)参见:

将numpy导入为np
以mu形式导入maze_utils
将matplotlib.pyplot作为plt导入
尺寸=101
迷宫,开始=mu.make_迷宫(大小)
开始=[开始[1],开始[0]]
#------------------------------------------------------------------------------
def junctions_finder(迷宫、大小、开始):
交叉点=[开始]
结束=[]
对于y,枚举(迷宫)中的行:
对于x,枚举(行)中的列:
如果迷宫[x,y]==假:
如果x==0或x==(大小-1)或y==0或y==(大小-1):
连接。附加([y,x])
end.append([y,x])
尽管如此:
如果x+1<尺寸,y+1<尺寸和\
迷宫[x+1,y]==False和迷宫[x,y+1]==False\
或x+1<尺寸,y-1>0和\
迷宫[x+1,y]==False和迷宫[x,y-1]==False\
或者x-1>0和y-1>0和\
迷宫[(x-1),y]==假,迷宫[x,(y-1)]==假\
或x-1>0,y+1<尺寸和\
迷宫[(x-1),y]==假,迷宫[x,(y+1)]==假:
连接。附加([y,x])
打破
其他:
打破
返回连接,结束
#------------------------------------------------------------------------------
def消除_coor(连接、结束、开始):
消除=[]
对于交叉口中的行:
a=第[1]行
b=行[0]
连接=0
U=假
D=假
L=假
R=假
UW=假
DW=假
LW=假
RW=False
SE=假
如果行==开始或行==结束[0]:
连接数=2
SE=真
对于范围内的i(1,尺寸):
如果SE==False:
如果a+i=0且UW==False且U==False:
如果迷宫[a-i,b]==真:
UW=真
其他:
对于交叉口中的coor:
如果[coor[1],coor[0]==[a-i,b]:
连接=连接+1
U=真
如果b+i=0,LW=False,L=False:
如果迷宫[a,b-i]==真:
LW=真
其他:
对于交叉口中的coor:
如果[coor[1],coor[0]==[a,b-i]:
连接=连接+1
L=真
如果连接小于2:
删除。追加([b,a])
消除返回
#------------------------------------------------------------------------------
def接头拆卸器(接头,已消除):
计数器=0
对于索引,枚举中的行(连接):
对于erow in(已消除):
如果erow==行:
交叉点[索引]=-1
计数器=计数器+1
对于范围内的时间(计数器):
连接。删除(-1)
返回路口、柜台
#------------------------------------------------------------------------------
连接,结束=连接\u查找器(迷宫,大小,开始)
计数器=1
当计数器>0时:
消除=消除(连接、结束、开始)
接头,计数器=接头拆卸器(接头,已消除)
开始=[开始[1],开始[0]]
交叉点。流行音乐(0)
pyjunc=np.数组(连接点)
mu.plot_迷宫(迷宫,开始=开始)
plt.绘图(pyjunc[:,0],pyjunc[:,1],'o')
plt.plot(pyjunc[:,0],pyjunc[:,1])将连接点。。。或者你是说你有一个无法追踪的bug?在你的照片中,似乎有一个开始,但没有结束,所以它追溯到开始

plt.plot(pyjunc[:,0], pyjunc[:,1], 'o')
用圆圈标记绘制列表中的数据点
'o'
。但您尚未定义线条样式

最快的方法是将其添加到格式速记中:

plt.plot(pyjunc[:,0], pyjunc[:,1], 'o-')
这表示要使用圆形标记和实线
'-'

将其扩展到matplotlib对其的解释,您可以编写:

plt.plot(pyjunc[:,0], pyjunc[:,1], marker='o', linestyle='-')
您可以查看更多自定义绘图的方法

plt.plot(pyjunc[:,0], pyjunc[:,1], marker='o', linestyle='-')