c 语言实现迷宫问题数据结构试验——迷宫问题(一)基本问题这是心理学中的一个经典问题
心理学家把一只老鼠从一个无顶盖的大盒子的入口处放入,让老鼠自行找到出口出来
迷宫中设置很多障碍阻止老鼠前行,迷宫唯一的出口处放有一块奶酪,吸引老鼠找到出口
简而言之,迷宫问题是解决从布置了许多障碍的通道中寻找出路的问题
本题设置的迷宫如图 1 所示
图 1 迷宫示意图迷宫四周设为墙;无填充处,为可通处
设每个点有四个可通方向,分别为东、南、西、北(为了清楚,以下称“上下左右”)
左上角为入口
右下角为出口
迷宫有一个入口,一个出口
设计程序求解迷宫的一条通路
以一个 m×n 的数组 mg 表示迷宫,每个元素表示一个方块状态,数组元素 0 和 1 分别表示迷宫中的通路和障碍
迷宫四周为墙,对应的迷宫数组的边界元素均为 1
根据题目中的数据,设置一个数组 mg如下intmg[M+2][N+2]={1,1,1,1,1,1,1,1},{1,0,0,1,0,0,0,1},{1,1,0,0,0,1,1,1},{1,0,0,1,0,0,0,1},{1,0,0,0,0,0,0,1},{1,1,1,1,1,1,1,1}};在算法中用到的栈采纳顺序存储结构,将栈定义为Struct{inti;//当前方块的行号intj;//当前方块的列号intdi;//di 是下一个相邻的可走的方位号}st[MaxSize];//定义栈inttop=-1//初始化栈3 设计运算算法要寻找一条通过迷宫的路径,就必须进行试探性搜索,只要有路可走就前进一步,无路可进,换一个方向进行尝试;当所有方向均不可走时,则沿原路退回一步(称为回溯),重新选择未走过可走的路,如此继续,直至到达出口或返回入口(没有通路)
在探究前进路径时,需要将搜索的踪迹记录下来,以便走不通时,可沿原路返回到前一个点换一个方向再进行新的探究
后退的尝试路径与前进路