实现迷宫树以在DFS,BFS中使用
Implementing a tree for a maze to use in DFS, BFS
我的程序正在从文件中获取字符数组作为输入。数组如下所示:
"#########",
"# # #",
"# ## # #",
"# # #",
"### # ###",
"# # # #",
"# # #####",
"# # #",
"#########",
我正在实施 DFS 和 BFS 来解决这个迷宫,从 [1,1] 开始并以 [宽度 - 1,高度 - 1] 结束。
我想制作一棵代表迷宫的树,然后分别使用每种算法遍历树。
我将从每一行开始并扫描空单元格,在每个空单元格处,其右侧,左侧和底部的每个单元格都将是该单元格的子单元格。它看起来像这样:
for (int i = 0; i < width; i++)
{
for (int j = 0; j < height; j++)
{
if (isEmpty(maze[i][j]))
{
putChildren(maze[i-1][j], maze[i][j+1], maze[i+1][j]);
//this will check if it's a wall first
}
}
像这样实现树,然后使用它使用 DFS 和 BFS 遍历树是一种可行的策略,还是我应该以另一种方式这样做?
不错的项目,我喜欢这样的事情。顺便说一下,您是否考虑过定向尝试算法(所谓的 A* 算法),我认为它对您来说会更好,尤其是在处理 2D 阵列时。在通常情况下,它比其他方法具有更好的性能,并且您不需要使用链接单元格。该算法也有某种改进,包括与"尝试方向优先"方法链接的内存。当然,您的方法没有问题,但是当您有非常巨大的矩阵要处理时,请考虑这种情况。
你的想法很好,而且很简单,但我认为你误解了带有图表的树。
首先,无需从迷宫图创建树 - 您可以在常规图上运行BFS, DFS, A* , ...
。
此外,并非每个迷宫都可以呈现为一棵树。
让我们看一下这个例子:
"#####",
"# #",
"# # #",
"# #",
"#####",
显然,迷宫中有一个循环,所以它不能呈现为一棵树。您的示例也有几个周期。
相关文章:
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 如何用C++编写BFS函数
- 使用 bfs 解决连接组件问题时得到错误的答案
- 实现 DFS 在较短的输入下工作正常,但在较大的输入下会抛出分段错误
- 使用 BFS 的单词梯 2
- 在 c++ 中执行 BFS 时出现分段错误
- BFS 打印最短路径
- DFS 在 C++ 中的实施
- 在C++中使用双 DFS 查找树的直径
- 如何打印 BFS 路径本身而不是此单词梯的路径长度?
- 多源 BFS 多线程
- 无法在基于 DFS 的任务排序程序中填充"stack"
- 矢量堆栈对 |使用 dfs 的树中的最长路径
- 在C++中实现 DFS 时出现分段错误
- Node中的子节点列表在C++中的BFS遍历过程中丢失
- 使用BFS/DFS解决编程任务
- 实现迷宫树以在DFS,BFS中使用
- 邻接列表,用于创建图形和广度优先搜索 (BFS) 和 Fepth First Search (DFS)
- BFS 和 DFS 的图形在C++
- 邻接表上的BFS和DFS