题目
oibh被突来的洪水淹没了>.<还好oibh总部有在某些重要的地方起一些围墙,用号表示,而一个封闭的号区域洪水是进不去的……现在给出oibh的围墙建设图,问oibh总部没被淹到的重要区域(由"0"表示)有多少。
输入格式
第一行是两个数,x和y(x,y<=500)
第二行及以下是一个由 * 和 0 组成的 x*y 的图。
输出格式
输出没被水淹没的oibh总部的“0”的数量。
输入输出样例
样例输入1
4 5
00000
00*00
0*0*0
00*00
样例输出1
1
样例输入2
5 5
*****
*0*0*
**0**
*0*0*
*****
样例输出2
5
思路(按元素枚举)
DFS。初始化将围墙区域标记为1,重要区域标记为0。从边界向内挨个枚举洪水可流经的区域,凡被洪水淹没的重要区域都标记为1。最后所剩的0的个数就是没被淹到重要区域的个数。
举例,假如 x*y 图如下,
5 7
0 0 * * * 0 0
0 0 * 0 * 0 0
* * * 0 * * 0
* 0 * * * 0 0
* * * 0 * * 0
洪水从边界挨个向里淹没,浅灰色即是后来淹没的重要区域,最终剩下3个重要区域未被淹没。
注意边界条件。
代码
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 510