在上一章的移动迷宫小游戏中,我们用回溯法帮骑士在迷宫中找到了通往出口的一条通路,但是骑士并不满意,他又提出了更高的需求。
《移动迷宫》升级版游戏简介:迷宫只有一个入口和一个出口,骑士从入口走进迷宫,现在需要你找一条通往出口最短的路线,将行走路线告诉骑士。
设计思路
寻找最短路线这样的问题,学完了图存储结构之后,最先会将它和最短路径联系到一起。
最短路径通常指的是路径的权值最小,但在本节的问题中,骑士只想走最少的路达到出口,因此我们要找的是一条从入口到出口、途径地最少的路径。
解决本节的问题,仍然可以用迪杰斯塔拉算法或者弗洛伊德算法,也可以用广度优先搜索算法。
迪杰斯塔拉算法查找最短路线
迪杰斯塔拉算法是在网结构中查找最短路径,所以需要先将迷宫转换成无向网(骑士在迷宫中可以任意方向行走)。
迷宫转换成无向网
假设移动迷宫如图 1 所示:
图 1 移动迷宫
提示:S 为入口,E 为出口,# 为墙壁,- 为通路。
存储图 1 中的迷宫,首先会想到用二维数组存储。数据结构中,无向网也可以用二维数组存储。
将迷宫转换成无向网的具体方法是:迷宫中的各个位置