一、简介
利用栈来解决走迷宫问题还算是比较简单,也容易想的到。不用栈的做法之前有想过,但是也没想明白具体该怎么实现。下面用栈来实现走迷宫问题。说明:假设可以斜着走,那么每个位置就有8个方向可以走。
二、流程图
在编程实现前,首先应该建立一个流程图,这是为下面编程提供清晰的思路。
这个流程图只是简单说明走迷宫的基本过程,但是要用具体的代码实现,还需要对每个步骤添加很多细节。
三、代码实现
1. 先来看Node.h文件
这个文件作用是产生一个结点。这里对结点的数据域做了修改,已不再是简单的数据类型,而是利用数组来保存迷宫中的位置信息(坐标)和方向。这里加方向只是为了当新节点无路可走时,在退回上一位置后,不用从最开始的方向(顺时针),即左上角的方向开始找路,只需要访问该节点的方向,然后顺时针往前移动一个位置,然后重复的找。因为刚开始编程时没有用到方向,使得程序一直卡在两个节点之间,来回跳。
假如当前结点在白色地方,环绕它身边的有8个位置,我们每次找新位置时都是按顺时针顺序从数字1的地方开始,直到数字8的地方。数字1-8也表示下个结点的方向。代码如下:
template<class T> class Stack;
template<class T>
class Node
{
friend class Stack<T>;
public:
Node()
{
this->next = NULL;
}
Node(const T data_m, const T data_n, const int number)
{
this->data[0] = data_m;//表示横坐标
this->data[1] = data_n;//表示纵坐标
this->data[2] = number;//表示下一步是