知·识·概·要
【迷宫问题】
今天我们从一个简简单单的迷宫问题引入今天的知识点。
今天,田所浩二的好朋友德川约田所去餐厅食雪(意味深),但田所从家到餐厅的路事一个一个一个一个迷宫,由于田所不会走迷宫,他在死胡同里迷路力(悲),现在他十分甚至九分的需要一种方法帮他成功赶到餐厅。
用什么方法呢?就事深度优先搜索罢(喜)!
【深度优先搜索】
什么事深度优先搜索?
深度优先搜索,简称深搜,事一种对于树而言的搜索方法(当然,对于图而言也事可以的罢)。
我们看一眼这个迷宫,把它抽象成一棵树。
有了树以后,就可以开始搜索力(狂喜)!
首先确定起点和终点,不难发现家事起点,餐厅事终点;
接着看,从家可以直接到达A
点,这时把A
当作新的起点进行搜索;
从A
点可以直接到达C
点,把C
当作新的起点;
从C
点可以直接到达F
、E
、D
三个点,它们都没有可以直接到达的点,退回到C
点,这一过程事回溯;
C
点可以直接到达的三个点全部走过,回溯;
A
点还可以直接到达B
点,没有可以直接到达的点,回溯;
A
点还可以直接到达G
点,把G
当作新的起点;
G
点可以直接到达H
点,没有可以直接到达的点,回溯;
G
点还可以直接到达餐厅,找到目标,停止搜索。
总结:深搜就事不撞南墙不回头,只有到达路的尽头时才会回溯。
【图的深度优先遍历】
讲完搜索,再来讲一讲遍历。
遍历与搜索像啊很像啊,只不过遍历事相对于图的一种算法,遍历可以走任何的邻接点,这就事跟搜索的不同之处。
比如这样一个图:
假如我们规定较小的数字优先,对这个图进行深度优先遍历。
首先,确定起点为1
;
从1
的两个邻接点中,选取较小的结点2
,以2
为新的起点;
从2
的两个邻接点中,选取较小的结点3
,以3
为新的起点;
从3
的两个邻接点中,选取较小的结点4
,以4
为新的起点;
4
没有未被访问的邻接点,回溯;
选择3
的另一个邻接点5
作为新的起点;
此时整个图所有的结点都已经被访问过,停止遍历。
课·后·练·习
【题目描述】
有一块N
×M
的土地,雨后积起了水,有水标记为W
,干燥为.
。八连通的积水被认为是连接在一起的。请求出院子里共有多少水洼?
【输入描述】
第一行为N,M(1
≤N,M
≤110)
。
下面为N*M
的土地示意图。
【输出描述】
一行,共有的水洼数。
【输入样例】
10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.
【输出样例】
3
那么这期导学就到这里,压力马斯内!!!