【发布时间】:2012-05-26 02:49:55
【问题描述】:
对于我的 C++ 作业,我基本上是在尝试从左侧第二个顶部字符开始搜索文本文件(流式传输到我的向量 vec)中的一大段文本.这是一个文本迷宫,我的程序最终应该打印出穿过它的路径的字符。
迷宫的示例如下:
###############
Sbcde####efebyj
####hijk#m#####
#######lmi#####
###############
###############
###############
###############
###############
###############
###############
###############
###############
###############
###############
其中“#”是一堵无法行走的墙,您总是从左上角的第二个字符开始。字母字符代表可步行的方块。出口总是在右边。在 maze.text 文件中,迷宫始终为 15x15 大小。字母字符在同一个迷宫中重复,但不直接相邻。
我在这里要做的是:如果当前方块旁边的方块有字母字符,则将其添加到向量vec,并重复此过程,直到我到达迷宫的尽头。最终,我应该通过将某些迷宫中存在的多条路径打印到屏幕上来使这变得更加复杂。
到目前为止,我对算法本身有这个,我知道这是错误的:
void pathcheck()
{
if (isalpha(vec.at(x)) && !(find(visited.begin(), visited.end(), (vec.at(x))) != visited.end()) )
{
path.push_back(vec.at(x));
visited.push_back(vec.at(x));
pathcheck(vec.at(x++));
pathcheck(vec.at(x--));
pathcheck(vec.at(x + 16));
pathcheck(vec.at(x - 16));
}
}
visited 是我跟踪访问过的方块的向量。
我将如何更新它以使其真正起作用,并最终使我可以管理多个路径(即,如果有 2 条路径,程序将同时打印到屏幕上)?我记得有人告诉我可能需要另一个向量/数组来跟踪我已经访问过/检查过的方格,但是我将如何在这里实现呢?
【问题讨论】:
-
你需要记住你去过的地方,这样你就不会再检查了。否则你会不断地向前一步,后退一步,没有人会走得太远……
-
已更新。但我知道我在递归调用中的 vec.at 是错误的......我应该放什么?
-
你是否也在检查你没有走出 15x15 的迷宫区域?
-
我提供了一个涉及研究 DFS 和 BFS 的答案,但重读了您的帖子并阅读了这些 cmets,我发现您更关心实施问题而不是如何找到解决方案。
-
我之前看到了关于 DFS 和 BFS 的评论并阅读了 wiki 页面,但我不确定如何将其放入代码中。
标签: c++ variable-assignment maze