数据结构c语言版迷宫算法,迷宫求解C语言版(数据结构书上的算法)

注意!!!在打印那个函数的最后少了一个‘}’符号!!内有我对这个算法的详细思考笔记。。此程序包括头文件和主文件。。全部在VC6.0下调试通过。。注意这个是C语言版本。

值得初学数据结构的人学习使用,可以大幅提高C语言的指针和结构的理解!!特别是C语言中指向结构体的指针作为函数参数那一节的理解!谭浩强C语言P292!

/**

求迷宫中从入口到出口的所有路径是一个经典的程序设计问题!

1.为了保证在任何位置上都能沿原路返回,显然需要用一个后进先出的结构来保存从入口到当前位置的路径!SqStack堆栈可以描述。

2.从入口到出口,要选择一个初始方向,每个通道快包含一个位置属性和一个方向属性,此方向属性代表下一个通道块在当前通道块上的方向。如果需要统计入口到出口的步数,在通道块结构里可以加一个步数属性!SElemType和PosType结构可以描述。

3.如何描述迷宫??迷宫中通道快用字符'1'表示,墙面用字符'#'表示。如此一来,其实本质上,迷宫就是一个二维字符数组。可以用MazeType结构描述!

4.main函数包含3个内容,首先生成一个迷宫(InitMaze),然后打印此迷宫(PrintMaze),再就是迷宫求解的核心算法(MazePath),最后打印求解之后的迷宫。

5.核心算法的中心思想,严蔚敏的数据结构书上第50页51页52页有详细描述。

6.以下程序包括头文件和主文件。。全部在VC6.0下调试通过。。注意这个是C语言版本。

by sunrubben

2010.9.28

**/

/头文件

///

#include

#include

#include

#define TRUE 1

#define FALSE 0

#define OVERFLOW 0

#define OK 1

#define ERROR 0

#define STACK_INIT_SIZE 300//存储空间初始化分配量

#define STACK_INCREMENT 10//存储空间分配增量

#define MAXLEN 10

typedef int Status;

typedef struct

{

int r;

int c;

}PosType;

typedef struct

{

int ord;

PosType seat;

int di;

}SElemType;

typedef struct

{ SElemType *base;

SElemType *top;//栈底指针

int stacksize;

}SqStack;//函数声明

typedef struct

{

int r;

int c;

char adr[MAXLEN][MAXLEN];

}MazeType;//迷宫类型

Status InitStack(SqStack *S);//初始化

Status Push(SqStack *S,SElemType e);//向栈底插入元素

Status Pop(SqStack *S);//出栈

Status StackEmpty(SqStack *S);

Status InitMaze(MazeType *maze);//初始化迷宫

Status Pass(MazeType *maze,PosType curpos);//判断当前位置可否通过

Status FootPrint(MazeType *maze,PosType curpos);//走过的地方留下足迹

PosType NextPos(PosType curpos,int i);//探索下一位置并返回下一位置的坐标

Status MarkPrint(MazeType *maze,PosType curpos);//曾走过但不通留下标记并返回OK

Status MazePath(MazeType *maze,PosType start,PosType end);//迷宫maze存在从入口start到end的通道则求得一条存放在栈中

v

oid PrintMaze(MazeType *maze);//输出迷宫

///

///主文件///

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值