①实训说明
迷宫问题最早出现在古希腊神话中。据说,半人半兽的英雄西修斯在克里特的迷宫中勇敢地杀死了半人半牛的怪物,并循着绳索逃出迷宫。希腊史学家希罗多德曾探访过那里,他描述说,整个迷宫由12座带顶院落构成,所有的院落都用通道连接,形成了3 000个独立的“室”。后来的参观者也说,一旦进入迷宫,如果没有向导,根本无望走出。历史上人们认为迷宫具有魔力,后来迷宫成为游戏。在如今计算机普及的环境下,迷宫又以游戏程序的形式呈现在人们日常使用的电脑上。
求迷宫中从入口到出口的所有路径是一个经典的程序设计问题。由于计算机解迷宫问题时,通常用的是“穷举求解”的方法,即从入口出发,顺着某一方向向前探索,若能走通,则继续往前走;否则沿原路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止。为了保证在任何位置上都能沿原路退回,显然需要用一个后进先出的结构来保存从入口到当前位置的路径,这就用到了栈。
②程序分析
(1)以一个M×N的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。(www.xing528.com)
<!--[if !supportLists]-->(1)<!--[endif]-->根据二维数组,输出迷宫的图形。
<!--[if !supportLists]-->(2)<!--[endif]-->探索迷宫的四个方向:RIGHT向右,DOWN向下,LEFT向左,UP向上,输出从入口到出口的行走路径。
(2)可使用回溯方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的通路都探索到但未能到达出口,则所设定的迷宫没有通路。
③程序源代码
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。