基于栈的 C 语言迷宫问题与实现一.问题描述多年以来,迷宫问题一直是令人感兴趣的题目
实验心理学家训练老鼠在迷宫中寻找食物
许多神奇主义小说家也曾经把英国乡村花园迷宫作为谋杀现场
于是,老鼠过迷宫问题就此产生,这是一个很有趣的计算机问题,主要利用 “栈”是老鼠通过尝试的办法从入口穿过迷宫走到出口
迷宫只有两个门,一个叫做入口,另一个叫做出口
把一只老鼠从一个无顶盖的大盒子的入口处赶进迷宫
迷宫中设置很多隔壁,对前进方向形成了多处障碍,在迷宫的唯一出口处放置了一块奶酪,吸引老鼠在迷宫中寻找通路以到达出口
求解迷宫问题,即找出从入口到出口的路径
一个迷宫可用上图所示方阵[m,n]表示,0 表示能通过,1 表示不能通过
现假设耗子从左上角[1,1]进入迷宫,编写算法,寻求一条从右下角[m,n] 出去的路径
下图是一个迷宫的示意图:二.算法基本思想迷宫求解问题是栈的一个典型应用
基本算法思想是:在某个点上,根据一定的顺序(在本程序中顺序为上、右、下、左)对周围的墙、路进行推断(在本程序中分别用 1、0)代替,若周围某个位置为 0,则移动到该点上,再进行下一次推断;若周围的位置都为 1(即没有通路),则一步步原路返回并推断有无其他通路,然后再次进行相同的推断,直到走到终点为止,或者确认没有任何通路后终止程序
要实现上述算法,需要用到栈的思想
栈里面压的是走过的路径,若遇到死路,则将该位置(在栈的顶层)弹出,再进行下一次推断;若遇到通路,则将该位置压栈并进行下一次推断
如此反复循环,直到程序结束
此时,若迷宫有通路,则栈中存储的是迷宫通路坐标的倒序排列,再把所有坐标顺序打印后,即可得到正确的迷宫通路
三.程序具体部分的说明1
迷宫的生成根据题目的要求,迷宫的大小是自定义输入的
所以在程序中用 malloc 申请动态二维数组
数组中的元素为随机生成的 0、1
数组周围一圈的元素全部定义为