迷你程序应该打印出迷宫中所有可能的路线,其中入口/起点总是从左上角向下一个,所有可能的出口总是在右墙上.它从文本文件中检索迷宫.
迷宫实际上只是一堆文字.
迷宫由一个n×n网格组成,由作为墙壁的“#”符号和表示可步行区域/路径的各种字母[a … z]组成.信件可以重复,但永远不能并排.
迷宫是15×15.
大写字母S始终标记入口,位于第二高点的左侧墙壁上.可能的路径只能通过字母 – 你不能走#符号.右墙上的任何字母代表出口.
例如,
######
Sa#hln
#bdp##
##e#ko
#gfij#
######
是一个可能的迷宫.我的小程序应该在读取实际包含迷宫的文本文件后打印出所有可能的路径.
对程序的调用将生成以下输出到屏幕:
Path 1: S,a,b,d,e,f,i,j,k,o
Path 2: S,a,b,d,p,h,l,n
2 total paths
我该怎么做呢?我不需要完整的代码答案,我只想获得一些如何解决这个问题的指导.
到目前为止,我已经完成了除了实际算法本身之外的所有事情,它们以递归方式检查adajcent方块以查看是否可以在它们上行走,而且我不知道我是如何在多条路径上工作的.
这是我到目前为止(我知道我的路径检查错了,但我不知道还能做什么):
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <sstream>
#include <cstdio>
using namespace std;
ifstream file("maze.txt");
vector<char> vec(istreambuf_iterator<char>(file), (istreambuf_iterator<char>())); // Imports characters from file
vector<char> path; // Declares path as the vector storing the characters from the file
int x = 18; // Declaring x as 18 so I can use it with recursion below
char entrance = vec.at(16); // 'S', the entrance to the maze
char firstsquare = vec.at(17); // For the first walkable square next to the entrance
vector<char> visited; // Squares that we've walked over already
int main()
{
if (file) {
path.push_back(entrance); // Store 'S', the entrance character, into vector 'path'
path.push_back(firstsquare); // Store the character of the square to the right of the entrance
// into vector 'path'.
while (isalpha(vec.at(x)))
{
path.push_back(vec.at(x));
x++;
}
cout << "Path is: "; // Printing to screen the first part of our statement
// This loop to print to the screen all the contents of the vector 'path'.
for(vector<char>::const_iterator i = path.begin(); i != path.end(); ++i) //
{
std::cout << *i << ' ';
}
cout << endl;
system ("pause"); // Keeps the black box that pops up, open, so we can see results.
return 0;
}
}
谢谢!
解决方法:
你需要做一些事情:
>一种在内存中表示迷宫的方法 – 一种适合网格的“数据结构”,如迷宫
>访问和操纵迷宫的方法
>渲染迷宫的方法 – 也许是打印出迷宫
>一种跟踪进度的方法
>解决手头问题的算法
考虑从一个小得多的迷宫开始 – 也许是一个尺寸为3×3的迷宫 – 一条直线穿过地图的路径.你的程序应该能够解决这个问题.然后将路径更改为曲线.然后使地图更大.让路径更难.让一些“红鲱鱼”分支出路.
较小的地图,复杂性越来越高,应该使调试工作变得更加容易. (如果您不知道如何使用调试器,那么启动一个小问题将使学习调试器变得更容易.)
祝好运!