oibh 总部突然被水淹没了!现在需要你的救援……
题目描述
oibh 被突来的洪水淹没了,还好 oibh 总部有在某些重要的地方起一些围墙。用 * 号表示,而一个四面被围墙围住的区域洪水是进不去的。
oibh 总部内部也有许多重要区域,每个重要区域在图中用一个 0 表示。
现在给出 oibh 的围墙建设图,问有多少个没被洪水淹到的重要区域。
输入格式
第一行为两个正整数
x,y。
接下来
x 行,每行
y 个整数,由 * 和 0 组成,表示 oibh 总部的建设图。
4 5 00000 00*00 0*0*0 00*00
#include<bits/stdc++.h>
using namespace std;
int n,m,s=0;
int kx[5]={0,1,-1,0,0};
int ky[5]={0,0,0,1,-1};
int a[501][501];
void xz(int x,int y){
a[x][y]=1;
for(int i=1;i<=4;i++)
{
int dx=x+kx[i];
int dy=y+ky[i];
if(dx>0&&dx<=n&&dy>0&&dy<=m&&a[dx][dy]==0)
xz(x0,y0);
}
}
int main(){
cin>>n>>m;
char e;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>e;
if(e=='*')
a[i][j]=1;
else
a[i][j]=0;
}
}
for(int i=1;i<=n;i++)
{
if(a[i][1]==0)
xz(i,1);
if(a[i][m]==0)
xz(i,m);
}
for(int i=1;i<=m;i++)
{
if(a[1][i]==0)
xz(1,i);
if(a[n][i]==0)
xz(n,i);
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]==0)
s++;
}
}
cout<<s;
return 0;
}