题目链接:点击打开链接。
分析:这道题目很早前就见过,当时觉得太简单也没有写,结果一交,居然,居然。。。WA。。。
只有左,左下,下,右下,右,几个方向会导致WA,改成八个方向就可以,还没有想明白,嘤,想明白了再来补上。
这题可以用最基本的思路嘛,就是找哪些是通路,并记录是否访问过,就是开一个visited[NN],记录相应节点信息。不过更好的做法是,此题目中只有两种类型的信息,直接找到一个水洼就走上去,并把它变为另一种,知道走不下去了,跳到下一个,跳了几次就是有几个水洼~~
#include<iostream>
#define NN 100
int N,M;
using namespace std;
bool p[NN][NN];
void dfs(int n,int m)
{
p[n][m] = false;
for(int dy=n-1; dy<=n+1; dy++)
{
for(int dx=m-1; dx<=m+1; dx++)
{
if(dx >=0 && dy >= 0 && dx < M && dy < N && p[dy][dx])
{
dfs(dy, dx);
}
}
}
}
int main(void)
{
char c;
int cnt = 0;
cin>>N>>M;
for(int i = 0;i < N;i++)
{
for(int j = 0;j < M;j++)
{
cin>>c;
p[i][j] = (c == 'W') ? true : false;
}
}
for(int i = 0;i < N;i++)
{
for(int j = 0;j < M;j++)
{
if(p[i][j])
{
cnt++;
dfs(i,j);
}
}
}
cout<<cnt<<endl;
return 0;
}