原题链接放这里咯[USACO10OCT]Lake Counting S - 洛谷
题目大意就是说,一个矩阵内有多少个不相连的水洼块(八连通的积水被认为是连在一起的)
其实就是遍历一次矩阵,遇到一个水洼W,就把他相邻一圈的水洼全部涂成点(.),一遍dfs就可以处理一个水洼块。
void dfs(int x,int y){
area[x][y] = '.';
for(int i = -1; i <= 1; ++i){
for(int j = -1; j <= 1; ++j){
int dx = x+i,dy = y+j;
if(dx >= 0 && dy >= 0 && dx < N && dy < M && area[dx][dy] == 'W')
dfs(dx,dy);
}
}
return;
}
这就是这题的思路了,主函数我也贴一下吧:
int main(){
int res = 0;
cin >> N >> M;
for(int i = 0; i < N; ++i){
cin >> area[i];
}
for(int i = 0; i < N; ++i){
for(int j = 0; j < M; ++j){
if(area[i][j] == 'W'){
dfs(i,j);
res += 1;
}
}
}
cout << res << endl;
return 0;
}
以上代码已经经过OJ测试,可以AC