基础组芝士大乱炖5——dfs与bfs

前言 (废话)

本来想搞个上一集下一集什么的,但一周过后发现改不了了,想改……

主题

相信各位Dalao对dfs与bfs很熟悉吧,有时候题没思路,就去打搜索(暴搜不算),所以搜索的应用也蛮广泛的,一篇帖子讲不完,以后会慢慢补充。

dfs

懒得写
1ada015d-961e-4366-b442-41c24e8d7c57
076e6ebe-d89f-4e4a-9700-1ca202eb4879

bfs

1、从起点出发,同时向右、下可通行的路搜索
2、遇到一个新的岔路,两个岔路同时搜索
3、一条路到了死路,其他路继续
4、找到终点,此时可以结束,终点的步数必为最短步数
5、或是不结束(依据题意),直到将图全部搜索完

题目

2. 马的遍历

题目ID:9563必做题100分

时间限制: 1000ms

空间限制: 131072kB

题目描述

有一个 n×m 的棋盘,在某个点 (x,y) 上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步。
输入格式:
一行四个数据,分别为 n, m, x, y,代表棋盘的大小和马的坐标。(1≤ x ≤ n ≤ 400,1≤y≤m≤400)
输出格式:
一个 n×m 的矩阵,展现马到达每个点要走的最少步数(不能到达的位置输出 −1)
download

样例输入:

3 3 1 1

样例输出:

0 3 2 3 -1 1 2 1 4

3. 宝藏迷宫Ⅰ

题目ID:9862拓展题100分

时间限制: 1000ms

空间限制: 262144kB

题目描述

最近探险家们在X国发现了一处遗迹,里面的地形复杂好比一个迷宫,但是里面有非常多的宝藏。探险家们提前用“鹰眼”探查到了这个迷宫的地图结构,可以用一个二维图来表示。'#‘代表无法跨越的陷阱,’*'代表可以去的位置,某些位置上存在宝藏,用一个数字表示这个宝藏的价值。遗迹特别神奇,某个位置一旦经过就会消失,不可再次到达。在迷宫中移动有上下左右四种方式。探险家们想要知道从左上角的入口到达右下角的出口,最多可以获得多少宝藏?

输入格式

第一行包含两个整数n,m,表示迷宫的大小。接下来的n行,每行包含m个字符,代表迷宫(保证入口没有陷阱)。

输出格式

一个整数。代表总共可获得的宝藏价值和,无法到达出口则输出-1

样例

Input 1

5 6 1****# ###2# 4#### ###1# 1

Output 1

6

样例解释

这个测试样例中,一种可行的路径是:从(1,1)位置开始,向下,向下,向下,向下,向下,右移,右移,右移,右移,右移,到达(5,6)位置。在这个路径中,可以获得的宝藏价值是1+4+1=6。

数据范围

1 <= N,M<= 7,0<=宝藏价值<=9

不对啊,第二次的2,2,之前走过来,不应该被标记吗