Lake Counting積水問題dfs深さ探索
原題リンク:Lake Counting
深度優先検索
任意wから、隣接部分を全て用いる.代わりに.一度のDFSは、このwと初期に接続されたすべてのwを'.'に置き換えることができ、ウサギが存在しないwまでの合計回数であるDFSの回数,すなわち原題の池の数である.複雑度はO(8 NM)=O(M*N)である.
深度優先検索
任意wから、隣接部分を全て用いる.代わりに.一度のDFSは、このwと初期に接続されたすべてのwを'.'に置き換えることができ、ウサギが存在しないwまでの合計回数であるDFSの回数,すなわち原題の池の数である.複雑度はO(8 NM)=O(M*N)である.
#include
#include
using namespace std;
#define maxn 105
char field[maxn][maxn];
int n,m;
void dfs(int x,int y)
{
field[x][y]='.';
//
for(int dx=-1;dx<=1;dx++){
for(int dy=-1;dy<=1;dy++){
int nx=x+dx,ny=y+dy;
// (nx,ny) ,
if(0<=nx&&nx<n&&0<=ny&&ny<m&&field[nx][ny]=='W'){
dfs(nx,ny);
}
}
}
}
void solve()
{
int res=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(field[i][j]=='W'){
//
dfs(i,j);
res++;
}
}
}
printf("%d
",res);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>field[i][j];
}
}
solve();
return 0;
}