【数据结构严蔚敏】 第三章 栈基本应用 迷宫问题
问题分析:
求迷宫中从入口到出口的路径问题,使用穷举法,为了实现求解过程中原路返回操作,使用栈的结构。
注:当前道路可通,指的是该位置不仅是通道块,而且要求未曾到访过(否则会原地打转)。
代码部分如下:
1.基本结构定义
关于栈的基本定义,见栈的基本操作
typedef struct {
int row;//行
int column; //列
}PosType; //坐标类型
typedef struct {
int ord; //通道块在路径上的序号
PosType seat;//通道块在迷宫中的坐标位置
int dir; //下一通道块的方向
}SElemType; //栈的元素类型
typedef struct {
int a[11][11]; //定义10*10的二维迷宫,值为1表示可以通过,值为0表示不能通过。
PosType start = {
1,1 };//定义起始位置坐标为(1,1)
PosType end = {
9,9 };//定义出口位置坐标为(9,9)
}MazeType;
2.迷宫求解函数实现
主要理解原路返回时的Pop,Push操作
Status Mazepath(MazeType maze) {
SqStack S;
InitStack(S);
PosType curpos = maze.start; //当前位置
int curstep = 1; //first step
SElemType e;
do {
if (Pass(maze, curpos)) {
FootPrint(maze, curpos); //留下足迹
e = {
curstep, curpos, 1 };
Push(S, e)