方法1:BFS
#include<iostream>
#include<queue>
#include<stdio.h>
using namespace std;
char matrix[110][110];
bool inq[110][110] = {false};
struct Node{
int x,y;
}node;
int n,m;
int X[4] = {0,0,-1,1};
int Y[4] = {1,-1,0,0};
void BFS(int x,int y){
queue<Node> q;
node.x = x;
node.y = y;
q.push(node);
while(!q.empty()){
Node f = q.front();
q.pop();
for(int i=0;i<4;i++){
node.x = f.x + X[i];
node.y = f.y + Y[i];
if(node.x>=0&&node.x<n&&node.y>=0&&node.y<m&&matrix[node.x][node.y]=='#'&&inq[node.x][node.y]==false){
q.push(node);
inq[node.x][node.y] = true;
}
}
}
}
int main(){
int ans = 0;
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>matrix[i][j];
}
}
for(int i = 0;i<n;i++){
for(int j=0;j<m;j++){
if(matrix[i][j]=='#'&&inq[i][j]==false){
ans++;
BFS(i,j);
}
}
}
cout<<ans<<'\n';
return 0;
}
方法2:DFS
#include<iostream>
#include<queue>
#include<stdio.h>
using namespace std;
char matrix[110][110];
bool f[110][110] = {false};
struct Node{
int x,y;
}node;
int n,m;
int X[4] = {0,0,-1,1};
int Y[4] = {1,-1,0,0};
void DFS(int x,int y){
for(int i =0;i<4;i++){
int x1 = x + X[i];
int y1 = y + Y[i];
if(x1>=0&&x1<n&&y1>=0&&y1<m&&matrix[x1][y1]=='#'&&f[x1][y1] == false){
f[x1][y1] = true;
DFS(x1,y1);
}
}
}
int main(){
int ans = 0;
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>matrix[i][j];
}
}
for(int i = 0;i<n;i++){
for(int j=0;j<m;j++){
if(matrix[i][j]=='#'&&f[i][j]==false){
ans++;
f[i][j] = true;
DFS(i,j);
}
}
}
cout<<ans<<'\n';
return 0;
}