题意与原解析均从本地 OpenJudge 缓存迁移。
OJ: noi_openjudge
题目 ID: ch0205-1388
难度:未知
标签:
日期: 2026-07-30 23:01
题意
完整题面见同目录的 problem.md。
思路
代码
cpp
#include <bits/stdc++.h>
using namespace std;
char _map[105][105];
bool vis[105][105];
int n,m;
int fx[][2] = { 0,1, 0,-1, 1,0, -1,0, 1,1, -1,1, 1,-1, -1,-1 };
void init(){
memset(vis,0,sizeof(vis));
scanf("%d%d",&n,&m);
int i,j;
for (i=1;i<=n;i++){
scanf("%s",_map[i]+1);
}
}
int cnt=0;
bool in_map(int x,int y){
if( x >=1 && y >=1 && x <= n && y <=m )
return 1;
return 0;
}
void dfs(int x,int y){
vis[x][y] = 1;
int i;
for (i=0;i<8;i++){
int nx = x + fx[i][0];
int ny = y + fx[i][1];
if( in_map(nx, ny) && !vis[nx][ny] && _map[nx][ny] == 'W'){
dfs(nx,ny);
}
}
}
int main(){
init();
int i,j;
for (i=1;i<=n;i++){
for (j=1;j<=m;j++){
if( !vis[i][j] && _map[i][j] == 'W'){
cnt++;
dfs(i,j);
}
}
}
printf("%d\n",cnt);
return 0;
}