#include<bits/stdc++.h>
using namespace std;
int n,m,ans = 0;
char mp[105][105];
int s[20000];
int dir[4][2] = {0,1,1,-1,1,0,1,1};
void init(){
for(int i = 1 ; i <= n * m ; i ++){
s[i] = i;
}
}
int find(int x){
if(s[x] == x){
return s[x];
}
else return s[x] = find(s[x]);
}
void Mest(int x,int y){
int tx = find(x);
int ty = find(y);
if(tx != ty){
s[tx] = ty;
ans --;
}
}
int main(){
cin >> n >> m;
init();
for(int i = 1 ; i <= n ; i ++){
getchar();
for(int j = 1 ; j <= m ; j ++){
cin >> mp[i][j];
if(mp[i][j] == 'W'){
ans ++;
}
}
}
for(int i = 1 ; i <= n ; i ++){
for(int j = 1 ; j <= m ; j ++){
if(mp[i][j] == 'W'){
for(int k = 0 ; k < 4 ; k ++){
if(mp[i + dir[k][0]][j + dir[k][1]] == 'W' && i + dir[k][0] >= 1 && i + dir[k][0] <= n && j + dir[k][1] >= 1 && j + dir[k][1] <= m){
Mest((i - 1) * n + j,(i - 1 + dir[k][0]) * n + (j + dir[k][1]));
}
}
}
}
}
cout << ans << endl;
}
第六个点数据
12 20
....WWWW....
...WW...
...W
W..WW..WWWWW
..W.
..WWW...
..WW..WW..WW
..WW.....WWW
WW.WW.WW
..W.
..W....W...W
.W..
..W...W.
...WWW.W.W..
........WW..
...W.W..
WWWW
WW.W..W..WW.
.WW.
WWWWWW..
WW..WW..WWWW
.....W..W..W
....W...
WWW.
WWW..W..W..W
..WW
.WW..W..
.W..W..W.WWW
答案是:7 我的输出结果是8