我正在尝试使用数组实现广度优先搜索迷宫。我现在面临的问题是我无法同时扩展路径。像这样:
#######
123456#
#3###7#
#4###8#
#5###9G
#######
我现在使用的方法是使用for循环遍历数组。我将起点设置为C(当前),将终点设置为G(目标)。 当我遍历迷宫时,我搜索存储角色的数组位置' C'。然后我检查了上,下,左,右是墙。如果没有,我会移动到下一个括号。新的支架我将它设置为' C'以及我设置的前一个括号' O'。
for (int i = 1; i < 12; i++)
{
for (int j = 0; j < 12; j++)
{
// find current node
if (maze[i][j] == 'C')
{
if (maze[i][j-1] == ' ') // up
{
maze[i][j-1] = 'C';
maze[i][j] = 'O';
}
else if (maze[i][j+1] == ' ') // down
{
maze[i][j+1] = 'C';
maze[i][j] = 'O';
}
else if (maze[i-1][j] == ' ') // left
{
maze[i-1][j] = 'C';
maze[i][j] = 'O';
}
else if (maze[i+1][j] == ' ')
{
maze[i+1][j] = 'C';
maze[i][j] = 'O';
}
}
如何实施&#39; C&#39;支架是在一个交界处?我使用for循环所以它会像这样继续出现:
####### ####### ####### ####### ####### ####### ####### #######
C # OC # OOC # OOOC # OOOOC # OOOOOC# OOOOOO# OOOOOO#
# ### # # ### # #C### # #C### # #C### # #C### # #O###C# #O###O#
# ### # # ### # # ### # # ### # # ### # # ### # #C### # #O###C#
# ### # ### # ### # ### # ### # ### # ### #C###
####### ####### ####### ####### ####### ####### ####### #######
答案 0 :(得分:1)
通常,您不会在BFS中同时扩展路径。相反,您将第一个元素放入队列,然后从前面迭代弹出第一个元素,然后将所有元素添加到队列的后面,这些元素可以从该元素到达并且不包含在队列中。
您正尝试仅处理地图; BFS无法做到这一点。您需要一个队列,其中包含已访问元素的位置以及将元素标记为已完成的方法。