数据结构中的迷宫问题 作者:**pp2009-5-21 22:26:00 推荐迷宫问题最早出现在古希腊神话中
据说,半人半兽的英雄西修斯在克里特的迷宫中勇敢地杀死半人半牛的怪物,并循着绳索逃出迷宫
希腊史学家希罗多德曾探访过那里
他描述说,整个迷宫由 12 座带顶院落构成,所有的院落都由通道连接,形成 3000 个独立的“室”
后来的参观者也说,一旦进入迷宫,如果没有向导,根本无望走出
历史上,人们认为迷宫具有魔力
后来,迷宫成为游戏
在如今计算机非常普及的情况下,迷宫又以游戏程序的形式呈现在我们日常使用的电脑上
解题思路解析: 在迷宫问题中,一个迷宫用二维数组 maze[size] [size]来存储,对当前位置(探索过程中某一时刻所在的位置)记为 maze[curpos
row][curpos
line],如果 maze[curpos
row][curpos
line]=0则有通路,如果 maze[curpos
row][curpos
line]=1 则无通路
从入口 star 出发,可沿四个方向前进
试探方向的变化 N(i-1,j) W(i,j-1) 位置(i,j) E(i,j+1) S(i+1,j) 0 表示E、1 表示S、2 表示W、三表示N
如果遇到 0 则可前进,遇 1 责受阻;按此规则求入口到某一确定出口的一条路径
算法的基本思想是:从迷宫的入口出发,进行判断,若当前位置可通(未走过的),则将当前位置插入栈顶,然后判断此位置是否为出口位置,如果是则结束整个运算,否则,改变当前位置到他的东临位置(即 0 方向);否则如果当前位置不通,这时若栈不空且栈顶位置尚有其他位置未搜索,则设定新的当前位置为栈顶位置的下一邻块,若栈不空且栈顶位置四周不通,则删去栈顶位置,若栈不空,则重新测试新的栈顶位置,直到找到一个可通的邻块或栈空,如此重复判断,直到找到一条从入口到出