#3944. 红与黑

红与黑

题目描述

有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。 你站在其中一块黑色的瓷砖上,只能向相邻(上下左右四个方向)的黑色瓷砖移动。 请写一个程序,计算你总共能够到达多少块黑色的瓷砖。

输入格式

输入包括多个数据集合。 每个数据集合的第一行是两个整数 WW 和 HH,分别表示 xx 方向和 yy 方向瓷砖的数量。 在接下来的 HH 行中,每行包括 WW 个字符。每个字符表示一块瓷砖的颜色,规则如下 1)‘.’:黑色的瓷砖; 2)‘#’:红色的瓷砖; 3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。 当在一行中读入的是两个零时,表示输入结束。

输出格式

对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。 数据范围 1≤W,H≤20

输入样例

image

输出样例

45

解决问题

解题方法 洪水灌溉算法是适用于针对于网格图,方便处理连通块的算法,就是从一点开始搜索。算法复杂度为log(mn),与网格长宽有关。有bfs和dfs两种搜索顺序。bfs搜索为一层一层的搜索扩展,可以求最短距离,dfs搜索不用队列实现,代码更短。 解题思路 首先需要使用while循环来实现多组数据输入,然后循环内使用char数组存入题目给出的地图数据,边输入边寻找起点,找到起点后存储一个起点的下标。然后从起点进入搜索阶段。 BFS 灌溉使用BFS实现洪水灌,特点是利用队列。使用pair<int,int>来存储一个点的下标每组数据搜索之前要将之前搜过的标记清空,然后将起点标记为已经搜过,接着将起点设为队首。 当队列非空时,先取出队首,然后在上下左右搜索,搜索到未被搜过且在范围内的黑色瓷砖就进行标记,答案加一,同时接入队列。 最后输出答案即可。

1s, 1024KiB for each test case.