题目描述
在一个 n×m 的矩形广场上,每一块 1×1 的地面都铺设了红色或黑色的瓷砖。小林同学站在某一块黑色的瓷砖上,他可以从此处出发,移动到上、下、左、右四个相邻的且是黑色的瓷砖上。现在,他想知道,通过重复上述移动所能经过的黑色瓷砖数。
输入
第 1 行为 n、m,2≤n、m≤50,之间由一个空格隔开; 以下为一个 n 行 m 列的二维字符矩阵,每个字符为“.”“#”“@”,分别表示该位置为黑色的瓷砖、红色的瓷砖、小林的初始位置
输出
输出一行一个整数,表示小林从初始位置出发经过的黑色瓷砖数
样例输入
9 11 .#......... .#.#######. .#.#.....#. .#.#.###.#. .#.#..@#.#. .#.#####.#. .#.......#. .#########. ...........
样例输出
59
时间限制: 1 Sec 内存限制: 128 MB
本题是学深度优先时优先做的一道题目,也非常经典。
这题用深度优先去统计.的个数,也就是瓷砖的个数。
在写深搜前,先定义好方向(dx,dy)、二维数组、vis(用来标记走过的路)、sum(统计瓷砖个数)以及x,y(起始位置),见下图:
bool a[500][500];//也可以用int,char
int s;//统计瓷砖个数
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};//四个方向
int n,m;//行数列数
int x,y;//保存起始位置
下面