如何以正确的顺序显示迷宫的解决路径?

问题描述 投票:0回答:1

我创建了一个迷宫解算器程序,它最后显示到达迷宫出口应采取的路径,但是当我使用 if(sol[i][j]==1) 使用 2 个循环显示路径时显示到cout

for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            if (sol[i][j] == 1)
            {
                cout << " (" << i << "," << j << "), ";
            }
        }
    }

sol 数组为 1 的索引我按照编译器遍历数组的顺序获取它们,即 我得到 (1,4), (1,5), (2,4), (3,0), (3,1), (3,2), (3,3), (3,4 ), (4,0) 代替:(1,5), (1,4), (2,4), (3,4), (3,3), (3,2), (3,1), (3, 0), (4,0) 我怎样才能以正确的顺序显示它们?

c++ maze
1个回答
0
投票

您没有给我们足够的代码来直接提供帮助,但我会尝试一下。

我见过的迷宫求解器往往是递归的。您选择一个起始位置并执行类似“我可以向左走吗?如果可以,从那里递归”之类的操作。您所走的任何路径,要么是死胡同,要么是循环返回“false”,或者一些其他代码来指示该分支不是解决方案。

当你递归地思考“我可以走对吗?我可以向上走吗?我可以向下走吗?”时,你最终会解决迷宫——你会在没有循环或违反其他规则的情况下到达终点。

此时,您可以执行以下两件事之一。您可以打印路径,也可以返回路径并让顶层程序为您打印。

所以你可能拥有的是:

boolsolveMaze(迷宫theMaze,位置location){...}

你能做的就是改变这个:

std::向量solvMaze(迷宫theMaze,位置位置,std::向量路径SoFar {...}

在每一步中,您都会附加到pathSoFar,但它是一个副本,因此如果您失败并向上跳一步,您仍然拥有孩子。

这还需要你的迷宫来跟踪你去过的地方。

但最后,您可以打印向量的结果。

© www.soinside.com 2019 - 2024. All rights reserved.