【发布时间】:2018-01-28 21:22:04
【问题描述】:
我正在尝试编写一个通过迷宫找到路径的函数。还有另一个函数从文本文件中读取迷宫。目前,当迷宫为 20 行和 20 列时,我编写的用于查找路径的函数可以正常工作,但它不适用于任何其他变体。这是我为该函数编写的代码:
void find_paths(maze m, int r, int c, int rows, int cols) {
if (r == rows - 1)
display(m, rows, cols);
else {
if (r > 0 && m[r - 1][c] == space) // UP
{
m[r - 1][c] = path;
find_paths(m, r - 1, c, rows, cols);
m[r - 1][c] = space;
}
if (m[r + 1][c] == space) // DOWN
{
m[r + 1][c] = path;
find_paths(m, r + 1, c, rows, cols);
m[r + 1][c] = space;
}
if (m[r][c - 1] == space) // LEFT
{
m[r][c - 1] = path;
find_paths(m, r, c - 1, rows, cols);
m[r][c - 1] = space;
}
if (m[r][c + 1] == space) // RIGHT
{
m[r][c + 1] = path;
find_paths(m, r, c + 1, rows, cols);
m[r][c + 1] = space;
}
}
}
空格是一个字符 =' ' 路径是一个 char ='.'
这是程序读取的迷宫文件的截图。
这是程序执行的截图。
我是 C++ 新手,希望你能帮助我。
【问题讨论】:
-
它解决了其他迷宫,但它一直打印它们至少8次或一直打印它们并且程序没有结束。
-
你的算法有一个概念问题,因为它永远不会结束,找到很多很多的解决方案,直到无穷大。而且我认为你应该调试你的程序,你会发现是哪一行导致了问题。
-
整理一个简短的完整示例,并将您遇到问题的迷宫作为文本包含在您的问题中。否则只是猜测。您最好使用调试器并弄清楚为什么您的递归永远不会结束。我没有看到明确的路径,也许你想要展示后返回。
-
查找“深度优先搜索”和“广度优先搜索”。或洪水填充,因为这就是您在这里所做的。基本上,您需要检测您何时已经到过那里。
-
迷宫是如何声明的?它应该知道它的行和列,使它们变得多余。看起来您在每次递归时都在制作整个迷宫的副本。