PKU2386 Lake Counting

()
なぜかscanfでやると答えが合わなかったんだけどなぜだろうか...
cinとprintfが混ざっていますが気にしないでくださいww

#include<iostream>
#include<cstdio>
using namespace std;

int n,m;
char ground[100][100];

void dfs(int x,int y){
        ground[x][y] = '.';
        for(int dx = -1; dx <=1;dx++){
                for(int dy = -1; dy <= 1; dy++){
                        int nx = x + dx;
                        int ny = y + dy;

                if(0 <= nx && nx < n && 0 <= ny && ny < m && ground[nx][ny] == 'W') dfs(nx,ny);
                }
        }
        return ;
}

int main(){
        int ans = 0;
        cin >> n >> m;
        for(int i = 0; i < n;i++){
                for(int j = 0; j < m; j++){
                        cin >> ground[i][j];
                }
        }
        for(int p = 0; p < n;p++){
                for(int q = 0; q < m; q++){
                        if(ground[p][q] == 'W'){
                                dfs(p,q);
                                ans++;
                        }
                }
        }
        printf("%d\n", ans);
        return 0;
}