关于迷宫问题,C++实现

2025-01-20 12:13:29
推荐回答(3个)
回答1:

如你所说,可以用2维数组(这里用a[N][N]来叙述吧,表示一个N*N格的迷宫图)来描述迷宫,算法可以是这样:
1)设置一个队列Q,存放可以通过的节点,即a[x][x]=0,并首先把入口点a[0][0]放入这个队列。再设置一个集合C,该集合存放所有扫描过的节点,初始化为空。
2)把队列Q的第一个节点a[p][q]取出来,如果它是a[N-1][N-1],即表示找到出口了,算法中止。否则扫描该节点的相邻节点a[p-1][q],a[p+1][q],a[p][q-1],a[p][q+1]四个节点(注意,有些节点不是存在4个相邻节点,例如a[0][0]只有a[0][1]和a[1][0]两个相邻节点),并检测这4个相邻节点是否在集合C中,如果在则丢弃,如果不在,则将它们依次放入队列Q的末尾。
3)把a[p][q]放入集合C中,重复步2)。

回答2:

10000111
00110001
10101101
01101101 p[N][M]

入口:1,0
出口: 3,6

路径:1,0 1,1 0,1 0,2 0,3 0,4 1,4 1,5 1,6
2,6 3,6

首先,初始化数组,也就是将一幅你已经设定好的数组迷宫图装入二维数组,如上图所示,载入方式,读一个字节数字,写入一个数组中,循环写入,直到迷宫图装载完成

然后,设定迷宫入口点和出口点.判断迷宫路径搜索的依据

最后就是寻路,依次搜索当前点的周围点是否为可走点,
p[N-1][M] p[N+1][M] p[N][M-1] p[N][M+1] ,
1、判断周围点是否为出口点标记。
2、判断是否为路口点,当有2个以上可用点,应保留这个路口点。
3、路口点的分支记录,保留路口点的同时,还要记录当前走的那条路做为记录。
4、记录已走路点,当走不通的时候,要对比路口点维护表,并比较已走过的分支,如果当前路口点分支都走完了,应删除死路的路口点,并在记录表中找到最后一个路口点,开始走新的分支。

回答3:

二维数组不好实现.

用类实现更好,
class mapsite
{
virtual enter() = 0;//是否可以进入
}
class room:mapsite
{...}
class wall:mapsite
{...}