导学_宽度优先搜索

本文介绍了宽度优先搜索(BFS)的概念,通过迷宫问题解释了BFS的工作原理,并对比了它与深度优先搜索(DFS)的区别。此外,还探讨了图的宽度优先遍历,并提到了在解决最短路径问题时的方向数组的应用。文章以一道寻找棋盘上两点间最少步数的题目作为课后练习,加深理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

知·识·概·要

【迷宫问题】

上一节深搜讲了个迷宫问题,今天在回顾一下(喜)。

今天,田所浩二的好朋友井上约田所去餐厅食雪(意味深),虽然田所学会了深度优先搜索,但井上早就预料到了田所会用深搜,专门强调田所不能用深搜。于是,田所又双叒叕被困在迷宫里力(大悲)。现在他十分甚至九分的需要另一种方法帮他成功赶到餐厅。
又要用什么方法呢?那就事深搜的好兄——宽度优先搜索罢!(狂喜)

【宽度优先搜索】

什么事宽度优先搜索?
宽度优先搜索又叫广度优先搜索,简称宽搜,与深搜类似,事一种对于树而言的搜索方法,但对于图而言使用的比较多。
宽搜类似于树的层次遍历,多用于求最短路径的题目,这就事宽搜与深搜的区别。
我们继续把迷宫抽象成一棵树;

这时,我们还需要一个一个一个一个队列存储经过的结点;

首先,田所从家出发,把家放到队列中;

从家可以直接到达A点,将A点放到队列中,然后把家弹出(悲);

A点可以直接到达CBG三个点,将CBG依次入队,然后把A点弹出;

C点可以直接到达FED三个点,将FED依次入队,然后把C点弹出;

B点没有可以直接到达的点,直接弹出;

G点可以直接到达H点和餐厅,将H和餐厅依次入队,然后把G点弹出;

FEDH四个点均没有可以直接到达的点,弹出;

最后队头就事餐厅(喜),弹出,然后停止搜索。

总结:宽搜与深搜不一样,深搜类似于先根遍历,而宽搜事一层一层的查找。

【图的宽度优先遍历】

与搜索类似,只不过对于图来说,遍历需要判断结点事否访问过,递进时判断事否被标记过。

一样,以这个图为例,规定以1为起点并将其标记,此时还需要一个一个一个一个队列;

首先将1入队;

1可以直接到达24两个未标记结点,将24标记并入队后,弹出1

2可以直接到达35两个未标记结点,将35标记并入队后,弹出2

435三个结点都没有可以直接到达的未标记结点,弹出;

此时栈为空,停止遍历。

拓·展·知·识

【方向数组】

什么事方向数组?
方向数组事解决二维数组最短路径问题时常用的两个一维数组,一般命名为dxdy
在解决四方向、八方向以及马步路径问题时十分甚至九分的常用。
在这里田所把各种问题的方向数组都打出来,有需要可以复制罢(悲)。
四方向:

int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};

八方向:

int dx[]={1,1,0,-1,-1,-1,0,1};
int dy[]={0,1,1,1,0,-1,-1,-1};

马步:

int dx[]={1,2,2,1,-1,-2,-2,-1};
int dy[]={2,1,-1,-2,-2,-1,1,2};

课·后·练·习

【题目描述】

在各种棋中,棋子的走法总是一定的,如中国象棋中马走“日”。有一位小学生就想如果马能有两种走法将增加其趣味性,因此,他规定马既能按“日”走,也能如象一样走“田”字。他的同桌平时喜欢下围棋,知道这件事后觉得很有趣,就想试一试,在一个100×100的围棋盘上任选两点ABA点放上黑子,B点放上白子,代表两匹马。棋子可以按“日”字走,也可以按“田”字走,俩人一个走黑马,一个走白马。谁用最少的步数走到左上角坐标为(1,1)的点时,谁获胜。现在他请你帮忙,给你AB两点的坐标,想知道两个位置到(1,1)点可能的最少步数。
提示:棋盘左上角坐标为(1,1),右下角坐标为(100,100)

【输入描述】

AB两点的坐标。

【输出描述】

最少步数。

【输入样例】

12 16
18 10

【输出样例】

8
9

那么这期导学就到这里,压力马斯内!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值