. . 利用栈实现迷宫的求解一、 要解决的问题 :以一个 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;//x 为行标, y 为列标}Direction_increm; 2:算法的设计:【1】迷宫图的设计设迷宫为 m 行 n 列,利用 maze[m][n] 来表示一个迷宫, maze[i][j]=0或 1; 其中:0 表示通路,1 表示不通,当从某点向下试探时,中间点有4 个方向可以试探, (见图)而四个角点有2个方向,其它边缘点有3 个方向,为使问题简单化我们用maze[m+2][n+2] 来表示迷宫,而迷宫的四周的值全部为1。这样做使问题简单了,每个点的试探方向全部为4,不用再判断当前点的试探方向有几个,同时与迷宫周围是墙壁这一实际问题相一致。假设有 6 行 8 列的迷宫,如下图为maze[8][10] 构造的迷宫1 1 1 1 1 1 1 1 1 1 1 0 1 1 10 1 1 1 1 1 0 0 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 0...