c++ - 使用数组的广度优先搜索

标签 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';  

                  }
    }

“C”括号在交界处的部分如何实现?我使用了一个 for 循环,所以它一直像这样出现:

#######   #######   #######   #######  #######  #######  #######  #######
C     #   OC    #   OOC   #   OOOC  #  OOOOC #  OOOOOC#  OOOOOO#  OOOOOO#
# ### #   # ### #   #C### #   #C### #  #C### #  #C### #  #O###C#  #O###O#
# ### #   # ### #   # ### #   # ### #  # ### #  # ### #  #C### #  #O###C#
# ###     # ###     # ###     # ###    # ###    # ###    # ###    #C### 
#######   #######   #######   #######  #######  #######  #######  #######

最佳答案

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

您正在尝试仅在 map 上工作;这对于 BFS 是不可能的。您需要一个包含已访问元素位置的队列以及一种将元素标记为已完成的方法。

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

关于c++ - 使用数组的广度优先搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22612810/

相关文章:

java - 如何使用广度优先搜索在树中找到从一个顶点到另一个顶点的路径?

C++ 内存表

c++ - hash_set::upper_bound() 是如何工作的?

c++ - tie 不应该叫 untie 吗?

c++ - "Undefined symbols"简单模板类的链接器错误

java - 如何在 Java 中使用 Scanner 将输入值存储在数组中

PHP 数组在 foreach 上的转换不会通过引用传递变量

arrays - numpy 乘以不同形状的数组

algorithm - 找到从任何顶点到图形边界的最小距离

java - 计算广度优先搜索中遍历的边数?