使用数组进行广度优先搜索
Breadth First Search using array
我正在尝试使用数组实现广度优先搜索迷宫。我现在面临的问题是我不能同时展开路径。像这样:
#######
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中不会同时展开路径。相反,您可以将第一个元素放入队列中,然后迭代地从前面取出第一个元素,然后将从该元素可到达且尚未包含在队列中的所有元素添加到队列的后面。
您正在尝试仅在映射上工作;这在BFS中是不可能的。你需要一个包含已访问元素位置的队列,以及一种标记元素已完成的方法。
http://en.wikipedia.org/wiki/Breadth-firstrongearch有一个很好的例子
相关文章:
- 提升图广度优先搜索前置编译错误
- 使用openmp实现并行广度优先搜索
- 广度优先搜索陷入无限循环
- 运行搜索数组
- 比较/搜索数组中多个整数的最佳解决方案
- 并行化广度优先搜索
- 如何使用C 中的广度优先搜索解决8个式嘴问题
- 如何使用广度优先搜索确定是否可以在有向图中到达顶点
- 修改广度优先搜索算法以记住矩阵中的最短路径
- C 搜索数组以获取一个数字,但如果找不到该数组,则不会触发其他语句
- 如何实现广度优先搜索
- 更高效的是,每次都读取文件或搜索数组中的数据
- 二叉搜索数组溢出 C++
- 图论:广度优先搜索
- 广度优先搜索未找到正确的路径
- 有向图中的广度优先搜索
- 使用Boost图库从多个来源进行广度优先搜索
- 如何用C++编写广度优先搜索的代码
- C++以广度优先搜索的方式查找多个数组中元素的所有组合
- 使用数组进行广度优先搜索