题目描述
小T的老家经常发洪水,小T建议用围墙将重要区域围起来,防止洪水将重要区域淹没。
现在用*
号表示墙,给出围墙的建设图纸,请问小T的老家有多少个重要区域(用0
表示)不会被洪水淹没。
输入格式
第一行是两个数,x和y。
第二行开始是一个由*
和0
组成的x×yx×y的矩形地图。
输出格式
共一行,一个数,表示不会被洪水淹没的重要区域数量。
输入输出样例
输入 #1
4 5
00000
00*00
0*0*0
00*00
输出 #1
1
输入 #2
5 5
*****
*0*0*
**0**
*0*0*
*****
输出 #2
5
输入 #3
5 7
00***00
00*0*00
***0**0
*0***00
***0**0
输出 #3
3
说明/提示
对于100%的数据,1≤x,y≤500
#include<iostream>
#include<cstdio>
using namespace std;
char ch;
int x,y,ans,map[550][550],dx[5]={0,1,-1,0,0},dy[5]={0,0,0,1,-1};
void dfs(int m,int n)
{
if(m<0||n<0||m>x+1||n>y+1||map[m][n])
return;
map[m][n]=2;
for(int i=1;i<=4;i++)
dfs(m+dx[i],n+dy[i]);
}
int main()
{
scanf("%d%d",&x,&y);
for(int i=1;i<=x;i++)
for(int j=1;j<=y;j++)
{
cin>>ch;
if(ch=='0')
map[i][j]=0;
else map[i][j]=1;
}
dfs(0,0);
for(int i=1;i<=x;i++)
for(int j=1;j<=y;j++)
if(!map[i][j])
ans++;
printf("%d",ans);
return 0;
}