//--------------------文件名:Maze.cpp------------------------
//----------------------By SunxySong-------------------------
//说明:本程序以迷宫问题进行演示,了解栈和链表的数据结构.
//运行过程:随机生成迷宫地图(由于未详细设计算法,故地图较简单),
// 并演示找到出口路径的过程.
//主要算法思想:
// 1.初始化迷宫,构造辅助运行栈和结果链表
// 2.从入口开始
// do
// {
// if (当前位置可通)
// {
// 当前位置入栈
// if (当前位置是出口)
// {
// 结束
// }
// else
// {
// 取得当前位置当前方向上的下一位置为当前位置
// 将新当前位置入栈
// }
// }
// else
// {
// 从栈中弹出栈顶元素为当前位置
// while(当前位置已无下一有效位置 && 栈不为空)
// {
// 将当前位置标记为无效
// 弹出栈顶元素为当前位置
// }
// if (当前位置还有下一有效位置时)
// {
// 当前位置方向调整
// 当前位置进栈
// 取得取得当前位置当前方向上的下一位置为当前位置
// }
// }
// }while(栈不为空时);
// 未找到出口
// 3.生成新地图
// 4.显示地图
//
//源代码在VC6+WIN2000sp2下编译通过
#include "stdafx.h"
#include <windows.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include <list>
#include <stack>
#include <time.h>
using namespace std;
//class:MazePos-----------------------------------------
//迷宫通道块类型
class MazePos
{
public:
int wx,ly; //块的X,Y坐标
int path; //块的类型;0:空块,-1:墙壁,1:出口路径
bool pass; //是否曾经过(对墙壁无意义);false:没有,true:曾经过
bool operator==(const MazePos pos)
{
return (wx==pos.wx && ly==pos.ly );
};
MazePos operator=(const MazePos pos)
{
wx=pos.wx;
ly=pos.ly;
pass=pos.pass;
path=pos.path;
return *this;
};
};
//End:MazePos---------------------------------------
//class:SElemType-----------------------------------------
//辅助栈元素类型
class SElemType
{
public:
int ord; //迷宫通道块路径上的序号
MazePos seat; //通道块在迷宫中的位置坐标
int di; //从此通道块走向下一通道块的方向
//0:无效,1:东,2:南,3:西,4:北
bool operator==(const SElemType et)
{
return (seat==et.seat);
};
SElemType operator=(const S