深度优先搜索(DFS)

本文介绍了如何使用深度优先搜索(DFS)解决迷宫问题,包括情景分析、代码构思和完整代码展示。通过二维数组表示迷宫,判断起点、终点和合法路径,递归搜索找到最短路径。
摘要由CSDN通过智能技术生成

这里使用一个最基础的 D F S DFS DFS 的题的思路来介绍——迷宫游戏。

情景分析

让我们先来看一个迷宫。
在这里插入图片描述
这时候让我们来找一下最短路径。
应该是这样:
在这里插入图片描述

这时候思考一下,如果是你在玩这个迷宫游戏,你会关注哪些点???

  1. 起点
  2. 当前点在整个图中的位置
  3. 终点

明白了你需要关注的地方,接下来就是进入代码了。

代码构思

首先是输入,我们应该如何把一个迷宫给传进去呢???
我们可以用一个二维数组来表示:

S**.
....
***T

其中 S S S 表示起点, T T T 表示终点, ∗ * 表示墙壁, . . . 表示平地。
你需要从 S S S 走到 T T T ,每次只能向上下左右相邻的位置移动,不能走出地图,也不能穿过墙壁,每个点只能通过一次。

首先,我们把现在所在的点的坐标称为当前状态,它初始在起点处。我们首先要判断他是不是终点,若为终点那就表示我们成功完成了这个问题,否则我们就继续按←,↓,→,↑的顺序依次判断“当前状态”的相邻点是否合法,如果左下右上四个点中有某一个点合法,那么就把它设为新的“当前状态”,然后重复上述操作,当某时出现四个点都不合法那么就退回上一个状态,寻找其他的道路。

关于合法的定义
  1. 必须在所给定的迷宫范围内
  2. 这个点在本次搜索中没有被访问过
  3. 这个点不是墙壁

代码体现

由于必须从起点开始,所以需要在输入后加一个判断,找出起点并把它存进当前状态

for (int i = 0; i < n; i++) {
   
	for (int j = 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值