题目背景
oibh总部突然被水淹没了!现在需要你的救援……
题目描述
oibh被突来的洪水淹没了>.<还好oibh总部有在某些重要的地方起一些围墙,用号表示,而一个封闭的号区域洪水是进不去的……现在给出oibh的围墙建设图,问oibh总部没被淹到的重要区域(由"0"表示)有多少。
输入格式
第一行是两个数,x和y(x,y<=500)
第二行及以下是一个由和0组成的xy的图。
输出格式
输出没被水淹没的oibh总部的“0”的数量。
样例输入1
4 5
00000
00*00
0*0*0
00*00样例输入2
5 5
*****
*0*0*
**0**
*0*0*
*****
样例输出1
1样例输出2
5
代码如下:
#include <iostream>
using namespace std;
const int N = 510;
int mp[N][N];int dx[] = {0, 0, 1, -1}, dy[] = {1, -1, 0, 0};int n, m;
void dfs(int x, int y) {for (int i = 0; i < 4; i++) {int xx = x + dx[i], yy = y + dy[i];if (xx < 0 || xx > n + 1 || yy < 0 || yy > m + 1 || mp[xx][yy])continue;mp[xx][yy] = 1;dfs(xx, yy);}
}int main() {cin >> n >> m;for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++) {char c;cin >> c;if (c == '0')mp[i][j] = 0;elsemp[i][j] = 1;}dfs(0, 0);int ans = 0;for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)if (!mp[i][j])ans++;cout << ans << endl;return 0;
}