《数据结构》严蔚敏版用栈实现迷宫求解问题
求迷宫中从入口到出口的所有路径是一个经典的程序设计问题。由于计算机解决迷宫问题时,通常用的是“穷举求解”的方法,即从口出发,顺某方向向前探索,若能走通,则继续往前走;否则沿原入口路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止。为了保证在任何位置上都能沿原路退回,显然需要用一个后进先出的结构来保存从入口到当前位置的路径。因此,在求迷宫通路的算法中应用栈。
程序中,建立二维数组为迷宫,0为墙壁,1为可以通行的道路。
算法的基本思想是:若当前位置“可通”,则纳入“当前路径”,并继续朝“下一位置”探索,即切换“下一位置”为“当前位置”,如此重复直到出口,若当前位置“不可通过”,则应顺着“来向”退回到“前一块道块”,然后朝着“来向”之外的其他方向继续探索。若4个方向都不可通过,则应从“当前路径”上删除该通道块。
C语言实现迷宫求解完整代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
typedef int Status;
typedef struct{
int row;
int col;
}PosType;
typedef struct{
int ord; //通道块在路径上的“序号”
PosType seat; //通道块在迷宫中的“坐标位置”
int di; //从此通道块走向下一通道块的“方向”
}SElemType;
typedef struct{
SElemType* base; //在栈构造之前和销毁之后,base的值为NULL
SElemType* top; //栈顶指针
int stacksize; //当前已分配的存储空间,以元素为单位
}SqStack;
//迷宫地图为全局变量
int MazeMap[10][10] = {
//0,1,2,3,4,5,6,7,8,9
{
0,0,0,0,0,0,0,0,0,0}, //0
{
0,1,1,0,1,1,1,0,1,0}, //1
{
0,1,1,0,1,1,1,0,1,0}, //2
{
0,1,1,1,1,0,0,1,1,0}, //3
{
0,1,0,