哪个算法可用于生成具有多个成功路径的迷宫?如果算法是某些著名算法的修改版本,请解释或添加链接。
我使用二维数组A来存储迷宫的配置。
假设迷宫的大小为n * n,则应该存在从A [0] [0]到A [n-1] [n-1]的不止一条路径。
哪个算法可用于生成具有多个成功路径的迷宫?如果算法是某些著名算法的修改版本,请解释或添加链接。
我使用二维数组A来存储迷宫的配置。
假设迷宫的大小为n * n,则应该存在从A [0] [0]到A [n-1] [n-1]的不止一条路径。
Q.push(initial_position)
visited[initial_position] = true
while !Q.empty
cur = Q.top
for n in cur.neighbors
if (visited[n])
continue;
Q.push(n)
from[n] = cur
visited[n] = true
visited
可以确保您不会重复访问节点。使用from
可以记住您到达该节点的方式。visited
更改为包含更多信息:Q.push(initial_position)
visited[initial_position] = 1
while !Q.empty
cur = Q.top
for n in cur.neighbors
++visited[n]
if (visited[n] > 1)
continue;
Q.push(n)
from[n] = cur
visited
不仅仅表示节点是否被访问过,而是表示它被访问的次数。需要注意的是,它仍然无法告诉我们到该节点有多少条路径,只能告诉我们是否存在多条路径到达该节点。goal
仍然很难检测到多个解决方案。考虑下面这个迷宫: #######
--> -->
# ### #
# ### #
# #
#######
visited
的样子: #######
-->1111111-->
#1###1#
#1###1#
#11112#
#######
n
开始,其中visited[n] > 1
,并更新visited
:Q.push(initial_position)
visited[initial_position] = 1
while !Q.empty
cur = Q.top
for n in cur.neighbors
++visited[n]
if (visited[n] > 1)
if (!visited2[n])
Q2.push(n)
visited2[n] = true
continue;
Q.push(n)
from[n] = cur
while !Q2.empty
cur = Q2.top
for n in cur.neighbors
visited[n] = max(visited[n], visited[cur])
if (visited2[n])
continue;
Q.push(n)
visited2[n] = true
visited
变成了: #######
-->2222222-->
#2###2#
#2###2#
#22222#
#######
因此,通过查看goal
,您可以确定是否存在多个路径到达它。