数据结构 第三章(学习笔记二(迷宫求解))

《数据结构》严蔚敏版用栈实现迷宫求解问题

求迷宫中从入口到出口的所有路径是一个经典的程序设计问题。由于计算机解决迷宫问题时,通常用的是“穷举求解”的方法,即从口出发,顺某方向向前探索,若能走通,则继续往前走;否则沿原入口路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止。为了保证在任何位置上都能沿原路退回,显然需要用一个后进先出的结构来保存从入口到当前位置的路径。因此,在求迷宫通路的算法中应用

程序中,建立二维数组为迷宫,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,
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值