ヒント 1
スペースを含む文字列の行を入力してください。gets の代わりに getline を使用してください
文字列 asd;
getline(cin、asd);
ヒント 2
2 つの整数 n m を最初に入力し、次に n 行 m 列の途中にスペースなしで文字を入力する場合
char 配列を使用して 2 次元行列を定義し、cin>> を使用して入力します
ヒント 3
最初に整数 n を入力し、次にスペースを含む可能性のある文字列を n 行入力する場合、n を入力した後に getchar() を 2 つ追加する必要があります。そうしないと、エラーが発生します。
#include <bits/stdc++.h>
using namespace std;
int n, m=200, len, ans;
int mx[5]={0, -1, 1, 0, 0};
int my[5]={0, 0, 0, -1, 1};
string s;
char a[110][210];
bool vis[110][210];
queue<int> qx, qy;
void bfs(int x, int y)
{
int nx, ny;
qx.push(x);
qy.push(y);
while(!qx.empty()){
x=qx.front();
y=qy.front();
qx.pop();
qy.pop();
for(int i=1; i<=4; ++i){
nx=x+mx[i];
ny=y+my[i];
if(nx>=1 && nx<=n && ny>=1 && ny<=m && !vis[nx][ny] && a[nx][ny]>='a' && a[nx][ny]<='z'){
vis[nx][ny]=true;
qx.push(nx);
qy.push(ny);
}
}
}
}
int main()
{
scanf("%d", &n);
getchar();
getchar();
for(int i=1; i<=n; ++i){
getline(cin, s);
len=s.length();
for(int j=1; j<=len; ++j){
a[i][j]=s[j-1];
}
for(int j=len+1; j<=m; ++j){
a[i][j]=' ';
}
}
for(int i=1; i<=n; ++i){
for(int j=1; j<=m; ++j){
if(a[i][j]>='a' && a[i][j]<='z' && !vis[i][j]){
ans++;
vis[i][j]=true;
bfs(i, j);
}
}
}
printf("%d", ans);
return 0;
}