Pow*_*yte 6 c++ tree breadth-first-search depth-first-search
我的程序将一个char数组作为文件的输入.该数组如下所示:
"#########",
"# # #",
"# ## # #",
"# # #",
"### # ###",
"# # # #",
"# # #####",
"# # #",
"#########",
Run Code Online (Sandbox Code Playgroud)
我正在实现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
}
}
Run Code Online (Sandbox Code Playgroud)
以这种方式实现树然后用DFS和BFS遍历树是否是一种可行的策略,或者我应该采用另一种方式?
不错的项目,我喜欢这样的事情。顺便说一句,您是否考虑过定向尝试算法(所谓的 A* 算法),我认为这对您来说会更好,尤其是在处理 2D 数组时。在通常情况下,它比其他方法具有更好的性能,并且您不需要使用链接单元格。该算法还有一些改进,包括与“先尝试方向”方法相链接的内存。当然,你的方法没有问题,但要考虑当你有非常巨大的矩阵需要处理时的情况。