利用栈实现迷宫的求解一、 要解决的问题 :以一个 m*n 的长方阵表示迷宫, 0 和 1 分别表示迷宫中的通路和障碍,设计一个程序,对任意设定的迷宫, 求出一条从入口到出口的通路,或得出没有通路的结论
二:算法基本思想描述: 用一个字符类型的二维数组表示迷宫,数组中每个元素取值“0”(表示通路)或“1”(表示墙壁)
二维数组的第0 行、第 m+1 行、第 0 列、第 m+1 列元素全置成“1”, 表示迷宫的边界;第1 行第 1 列元素和第m 行第 n 列元素置成“ 0”, 表示迷宫的入口和出口走迷宫的过程可以模拟为一个搜索的过程:每到一处,总让它按东、南、西、北4 个方向顺序试探下一个位置;用二维数组move 记录 4 个方向上行下标增量和列下标增量,则沿第 i 个方向前进一步,可能到达的新位置坐标可利用move 数组确定:Px=x+move[i][0] Py=y+move[i][1] 如果某方向可以通过,并且不曾到达,则前进一步,在新位置上继续进行搜索;如果 4 个方向都走不通或曾经到达过,则退回一步,在原来的位置上继续试探下一位置
三:设计:1:数据结构的设计:(1)定义三元数组元素的结构typedef struct MazeDirect { int Dx; //行标int Dy; //列标int direct; //走到下一个坐标点的方向}MazeDirect; (2)定义链表节点的结构组成typedef struct LinkNode { elemtype data; //数据域struct LinkNode *next; //指针域}LinkNode; (3)定义链栈的头指针typedef struct {
LinkNode *top; //栈的头指针}LinkStack; (4)移动数组结构的定义typedef struct { int x,y