递归地查找通过迷宫 c++ 的路径
Recursively finding a path through a maze c++
我已经努力解决这个问题几个小时了。我希望使用递归函数来解决用户输入给出的迷宫。迷宫的结构如下所示:
##########
# ### #
# # #
# #
# o #
# #
##########
bool searchMaze(int currR, int currC)
if (currR > (rows-1) || currC > (columns-1) || currR < 0 || currC < 0)
return false;
if (maze[currR][currC] == "o")
return true;
if (maze[currR][currC] == "#")
return false;
maze[currR][currC] = "+";
if (searchMaze((currR - 1), currC) == true)
{
return true;
}
if (searchMaze(currR, (currC + 1)) == true)
{
return true;
}
if (searchMaze((currR + 1), currC) == true)
{
return true;
}
if (searchMaze(currR, (currC - 1)) == true)
{
return true;
}
maze[currR][currC] = " ";
return false;
}
这是我上面的递归方法,"o"标记了一个解决方案。每次运行程序时,我都面临无限递归并得到错误
"在项目名称.exe中0x002396DA引发异常:0xC0000005:访问 违规写入位置 0x000A0FFC"和"未处理的异常在 项目名称.exe中的0x002396DA: 0xC0000005:访问冲突写入 位置0x000A0FFC">
添加缺少的大小写:
if (maze[currR][currC] == "+")
return false; // Already visited
您正在跟踪已访问的跟踪,并且不使用您跟踪的'+'
标记,从而导致无限递归,并且迭代未收敛。
你从来没有检查过你是否在看一个你以前已经探索过的地方。您将当前路径设置为"+",但从未在函数中实际检查过它。添加一个 if 语句,以便在当前位置标记为"+"时使函数不递归。
顺便说一下,当你回溯时,你可以通过不将路径设置回" "来大大加快你的算法,这样一旦探索了一个位置,你就永远不会回到它。这是有效的,因为你来自哪里并不重要,重要的是是否有一条从那个位置开始的路径。
相关文章:
- 如何将更多文件夹添加到c++include路径
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- C++A*算法并不总是在路径中具有目标节点
- 从函数角度看ID到文件路径的内部与外部映射
- boost xml parsingl将xml的路径作为变量发送
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- 如何使用cppcheck处理半相对包含路径
- 在C++中设置基于操作系统的文件路径
- 基于编译器选项的编译二进制路径
- 按边长度递归搜索图中所有可行路径
- 使用变量值作为 PlaySound 中的路径
- 如何转换真实路径 CString c++
- 从 GUID 获取 USB 卷路径
- 查找 GCD:并非所有控制路径都返回值
- C++17 文件系统::remove_all 带有通配符路径
- 在带有尾部斜杠的路径上返回 std::filesystem::create_directories() 的值
- 获取当前正在运行的 exe 名称(不是路径)
- 如何从 Skia 路径几何体中获取网格?
- CMake 错误"源似乎不包含 CMakeLists.txt",路径/库连接问题
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)