我们看下面这个迷宫----方阵(也可以是矩阵):
迷宫入口是坐标(2,0)位置,出口是(9,3)。我们假定0代表通路,1代表不通。
现在需要找到哪一条路是通路。我们的思想是借助栈,“回溯法”。回溯是什么意思呢???先从起点出发,检查它的上下左右是否是通路(即是否有为数字0处)。也就是说为0通了,压栈,将此位置元素变成2,这样做的好处是明确通路路径。然后继续往下走,判断上下左右 。直至我们找到终点(纵坐标在矩阵的最后一行)。
我们来看下我针对迷宫问题实现的代码:
#include<stack>
#include<assert.h>
#define N 10 //该迷宫10*10.
struct Pos //定义一个结构体,该结构体用来表示坐标。
{
int _row;
int _col;
Pos(int row,int col)
:_row(row)
, _col(col)
{}
};
template<class T>
bool SearchMazePath(int* a, int n, Pos entry, stack<T>& paths) //寻找迷宫是否有通路。
{
assert(a);
paths.push(entry);
while (!paths.empty())
{
Pos cur = pat