这里使用一个最基础的 D F S DFS DFS 的题的思路来介绍——迷宫游戏。
情景分析
让我们先来看一个迷宫。
这时候让我们来找一下最短路径。
应该是这样:
这时候思考一下,如果是你在玩这个迷宫游戏,你会关注哪些点???
- 起点
- 当前点在整个图中的位置
- 终点
明白了你需要关注的地方,接下来就是进入代码了。
代码构思
首先是输入,我们应该如何把一个迷宫给传进去呢???
我们可以用一个二维数组来表示:
S**.
....
***T
其中 S S S 表示起点, T T T 表示终点, ∗ * ∗ 表示墙壁, . . . 表示平地。
你需要从 S S S 走到 T T T ,每次只能向上下左右相邻的位置移动,不能走出地图,也不能穿过墙壁,每个点只能通过一次。
首先,我们把现在所在的点的坐标称为当前状态,它初始在起点处。我们首先要判断他是不是终点,若为终点那就表示我们成功完成了这个问题,否则我们就继续按←,↓,→,↑的顺序依次判断“当前状态”的相邻点是否合法,如果左下右上四个点中有某一个点合法,那么就把它设为新的“当前状态”,然后重复上述操作,当某时出现四个点都不合法那么就退回上一个状态,寻找其他的道路。
关于合法的定义
- 必须在所给定的迷宫范围内
- 这个点在本次搜索中没有被访问过
- 这个点不是墙壁
代码体现
由于必须从起点开始,所以需要在输入后加一个判断,找出起点并把它存进当前状态。
for (int i = 0; i < n; i++) {
for (int j = 0