使用数组进行广度优先搜索

时间:2014-03-24 14:53:26

标签: c++ arrays breadth-first-search maze

我正在尝试使用数组实现广度优先搜索迷宫。我现在面临的问题是我无法同时扩展路径。像这样:

#######
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### 
#######   #######   #######   #######  #######  #######  #######  #######

1 个答案:

答案 0 :(得分:1)

通常,您不会在BFS中同时扩展路径。相反,您将第一个元素放入队列,然后从前面迭代弹出第一个元素,然后将所有元素添加到队列的后面,这些元素可以从该元素到达并且不包含在队列中。

您正尝试仅处理地图; BFS无法做到这一点。您需要一个队列,其中包含已访问元素的位置以及将元素标记为已完成的方法。

http://en.wikipedia.org/wiki/Breadth-first_search有一个很好的例子。