c++ - 为迷宫实现一棵树以在 DFS、BFS 中使用

标签 c++ tree breadth-first-search depth-first-search

我的程序从文件中获取一个字符数组作为输入。该数组如下所示:

"#########",
"# #     #",
"# ##  # #",
"#     # #",
"### # ###",
"#   # # #",
"# # #####",
"#   #   #",
"#########",

我正在实现 DFS 和 BFS 来解决这个从 [1,1] 开始并以 [width - 1,height - 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 数组时。它在通常情况下比其他方法具有更好的性能,并且您不需要使用链接单元格。该算法也有一些改进,包括与“先尝试方向”方法链接的内存。当然你的方法没有问题,但考虑一下当你有非常巨大的矩阵要处理时的情况。

关于c++ - 为迷宫实现一棵树以在 DFS、BFS 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19820683/

相关文章:

java - 广度优先搜索 : How many states of a vertex are needed?

php - 用于查找数据树节点之间路径的高效代码

c++ - 计算数组中的反转次数

c++ - 如何在 C++ 中输出集合的最后一个元素?

c - 在 c 中实现 xml 解析器

algorithm - 我的二维树有问题

c++ - 嵌套命名空间中的前向声明

c++ - C++ 标准是否允许非模板类的模板构造函数?

javascript - 从带有子字段的平面列表构造层次结构树?

c++ - 广度优先搜索题 C++