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