时间限制: 1000 ms 内存限制: 65536 KB
提交数: 29 通过数: 21
【题目描述】
有一块N×MN×M的土地,雨后积起了水,有水标记为‘W
’,干燥为‘.
’。八连通的积水被认为是连接在一起的。请求出院子里共有多少水洼?
【输入】
第一行为NN,MM(1≤N,M≤1001≤N,M≤100)。下面为N×MN×M的土地示意图。
【输出】
一行,共有的水洼数。
【输入样例】
10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.
【输出样例】
3
http://bas.ssoier.cn:8086/problem_show.php?pid=3378
这题有点难度,用函数做比较简单:
不多哔哔,直接上代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,ans;
char ch[114][114];
void search(int i,int j)
{
ch[i][j]='.';
if(ch[i-1][j]=='W')search(i-1,j);
if(ch[i-1][j-1]=='W')search(i-1,j-1);
if(ch[i-1][j+1]=='W')search(i-1,j+1);
if(ch[i][j-1]=='W')search(i,j-1);
if(ch[i][j+1]=='W')search(i,j+1);
if(ch[i+1][j]=='W')search(i+1,j);
if(ch[i+1][j-1]=='W')search(i+1,j-1);
if(ch[i+1][j+1]=='W')search(i+1,j+1);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>ch[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if(ch[i][j]=='W')
{
search(i,j);
ans++;
}
}
cout<<ans;
return 0;
}
完~