编辑:我的目标是能够找到文本文件中将通过cin输入的字符迷宫的转义路径。因此,我创建了一个包含字符向量的向量来保存此迷宫贴图。我的下一步是使用堆栈或队列找到从起点到终点的逃生路径。
例如:地图可能是
# * #
* * D
S * #
其中#是墙壁,*是要在上面行走的开放空间,S是起点,D是终点。 输出解决方案将是:ENEE。
要执行此操作,我希望矩阵中的每个位置都指向其邻居,这样,如果我在某个位置,就可以访问存储在当前北,南,东和西位置的字符位置。
解决此问题的最佳方法是什么?我应该以不同的方式生成矩阵,还是可以分别添加指针?
这里是向量的向量:
vector<vector<char>> GetMap(int& M, int& N)
{
vector<vector<char>> matrix{};
char char_buf;
for (int rows = 0; rows < M; rows++)
{
matrix.push_back(vector<char>());
for (int cols = 0; cols < N; cols++)
{
cin >> char_buf;
matrix.back().push_back(char_buf);
}
}
return matrix;
}
答案 0 :(得分:0)
我假设您的意思是如果您有一个像这样的向量:
vector<vector<char>> matrix = {{'A', 'B', 'C', 'D'},
{'E', 'F', 'G', 'H'},
{'I', 'J', 'K', 'L'},
{'M', 'N', 'O', 'P'}};
还有一个索引,例如[2,2]('K'),您希望能够导航“北”(至“ G”),南(至“ O”),东(至“ L” )或西(以“ J”开头)。
这里不需要指针,我们实际上可以通过一些简单的算法来完成!
这是我模拟的示例,其中您具有[x,y]形式的一些坐标和[N,S,E,W]中的dir
:
switch(dir) {
case 'N':
case 'n':
y = (y - 1) % matrix.size();
break;
case 'S':
case 's':
y = (y + 1) % matrix.size();
break;
case 'E':
case 'e':
x = (x + 1) % matrix[y].size();
break;
case 'W':
case 'w':
x = (x - 1) % matrix[y].size();
break;
}
在此处查看实际操作:ideone