广搜:
#include<bits/stdc++.h>
using namespace std;
int n,m;
char a;
int dx[8]={-1,-1,0,1,1,1,0,-1},
dy[8]={0,1,1,1,0,-1,-1,-1};
bool v[111][111];
struct node{
int x,y;
}p[10001];
int s;
void bfs(int x,int y){
int h,t,xx,yy;
s++;
h=0;
t=1;
p[t].x=x;
p[t].y=y;
while(h<t){
h++;
for (int i=0;i<8;i++){
xx=p[h].x+dx[i];
yy=p[h].y+dy[i];
if (xx>=0&&yy>=0&&xx<n&&yy<m&&!v[xx][yy]){
t++;
p[t].x=xx;
p[t].y=yy;
v[xx][yy]=1;
}
}
}
}
int main(){
int l,k;
cin>>n>>m;
for (int i=0;i<n;i++){
for (int j=0;j<m;j++){
cin>>a;
if (a=='.'){
v[i][j]=1;
}
if (a=='W'){
v[i][j]=0;
}
}
}
for (int i=0;i<n;i++){
for (int j=0;j<m;j++){
if (!v[i][j]){
v[i][j]=1;
bfs(i,j);
}
}
}
cout<<s;
}
深搜:
#include<bits/stdc++.h>
using namespace std;
int n,m;
char a;
int dx[8]={-1,-1,0,1,1,1,0,-1},
dy[8]={0,1,1,1,0,-1,-1,-1};
bool v[111][111];
struct node{
int x,y;
}p[10001];
int s;
void dfs(int x,int y){
for (int i=0;i<8;i++){
int xx=x+dx[i],yy=y+dy[i];
if (xx>=0&&yy>=0&&xx<n&&yy<m&&!v[xx][yy]){
v[xx][yy]=1;
dfs(xx,yy);
}
}
}
int main(){
int l,k;
cin>>n>>m;
for (int i=0;i<n;i++){
for (int j=0;j<m;j++){
cin>>a;
if (a=='.'){
v[i][j]=1;
}
if (a=='W'){
v[i][j]=0;
}
}
}
for (int i=0;i<n;i++){
for (int j=0;j<m;j++){
if (!v[i][j]){
v[i][j]=1;
dfs(i,j);
s++;
}
}
}
cout<<s;
}