无法输入二维数组,直接程序自动结束,如何解决?

背景:做题遇到,题目
农夫约翰的农场可以表示成N*M(1≤N≤100≤M≤100)个方格组成的矩形。由于近日的降雨,在约翰农场上的不同地方形成了池塘。每一个方格或者有积水('W')或者没有积水('.')。农夫约翰打算数出他的农场上共形成了多少池塘。一个池塘是一系列相连的有积水的方格,每一个方格周围的八个方格都被认为是与这个方格相连的。现给出约翰农场的图样,要求输出农场上的池塘数。
输入
第1行:由空格隔开的两个整数:N和M
第2..N+1行:每行M个字符代表约翰农场的一排方格的状态。每个字符或者是'W'或者是'.',字符之间没有空格。
输出
输出只有1行,输出约翰农场上的池塘数

代码

#include <bits/stdc++.h>
using namespace std;
int n,m,b[101][101]={},out=0,a[101][101]={};
char linshi;
void lookfor(int numi,int numj){
    if(a[numi][numj]==1&&b[numi][numj]==0){
        b[numi][numj]=1;
        lookfor(numi,numj+1);
        lookfor(numi+1,numj);
        lookfor(numi+1,numj+1);
    }
}
int main(){
    cin>>n,m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>linshi;
            if(linshi=='W'){
                a[i][j]=1;
            }
        }
    }
    for(int i=1;i<n;i++){
        for(int j=1;j<m;j++){
            if(b[i][j]==0){
                lookfor(i,j);
                out++;
            }
        }
    }
    return 0;
}

运行结果:没有办法下文的

之前是直接char二维数组的,后来出现问题变成char转成0 1两种,放到int二维数组里,结果没用
我的思路有问题?

我想要达到的结果

输入
10 12
(字符串,加上我发不出去)
输出
3

谢谢

#include <bits/stdc++.h>

using namespace std;

void visit(vector<string> &a, int n, int m, int i, int j, char flag)
{
    vector<pair<int, int>> coords;
    a[i][j] = flag;
    for (int u = -1; u <= 1; u++)
    {
        for (int v = -1; v <= 1; v++)
        {
            int x = i + u;
            int y = j + v;
            if ((x < 0 || x >= n) || (y < 0 || y >= m) || (x == i && y == j))
                continue;
            if (a[x][y] == 'W')
            {
                a[x][y] = flag;
                coords.push_back({x, y});
            }
        }
    }
    for (auto [x, y] : coords)
        visit(a, n, m, x, y, flag);
}

int main()
{
    int n, m;
    cin >> n >> m;
    vector<string> a(n);
    for (int i = 0; i < n; i++)
        std::cin >> a[i];
    int count = 0;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            if (a[i][j] == 'W')
            {
                count++;
                visit(a, n, m, i, j, '0' + count);
            }
        }
    }
    printf("%d\n", count);
    return 0;
}
$ g++ -Wall -std=c++17 main.cpp
$ cat test.txt
10 12
......W.....
.W....WW....
.WW.........
..WW........
..W........
............
........WW..
........WWW.
...........W
...........W
$ cat test.txt | ./a.out
3

#include <bits/stdc++.h>

using namespace std;

int n,m,b[101][101]={0},out=0,a[101][101]={0};
char linshi;
void lookfor(int numi,int numj){
if(b[numi][numj]==1){

b[numi][numj]=0;
//8个方向
if(0<=numi-1)
lookfor(numi-1,numj+1);
if(0<=numj-1)
lookfor(numi+1,numj-1);
lookfor(numi,numj+1);
lookfor(numi+1,numj);
lookfor(numi+1,numj+1);
if(0<=numi-1&&0<=numj-1)
lookfor(numi-1,numj-1);
if(0<=numi-1)
lookfor(numi-1,numj);
if(0<=numj-1)
lookfor(numi,numj-1);
}
}

int main(){
cin>>n,cin>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>linshi;
if(linshi=='W'){
b[i][j]=1;
}
}
}

for(int i=0;i<=n;i++){
for(int j=0;j<=m;j++){
if(b[i][j]==1){
lookfor(i,j);
out++;
}

}

}
cout<<out;
return 0;
}

这样输入

img