dfs的练手题 遍历找到W就搜索与他相连的W变成点并计数
代码:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int N;
int M;
int sum = 0;
char p[101][101];
bool ok(int i, int j){
if(i >= 0 && i < N && j >= 0 && j < M && p[i][j] == 'W')
return true;
return false;
}
void dfs(int i, int j){
p[i][j] = '.';
if(ok(i+1, j))
dfs(i+1, j);
if(ok(i-1, j))
dfs(i-1, j);
if(ok(i+1, j+1))
dfs(i+1, j+1);
if(ok(i+1, j-1))
dfs(i+1, j-1);
if(ok(i-1, j+1))
dfs(i-1, j+1);
if(ok(i-1, j-1))
dfs(i-1, j-1);
if(ok(i, j+1))
dfs(i, j+1);
if(ok(i, j-1))
dfs(i, j-1);
return;
}
int main(){
//sum = 0;
while(cin >> N >>M){
sum = 0;
for(int i = 0; i < N; i++){
scanf("%s", p[i]);
}
for(int i = 0; i < N; i++){
for(int j = 0; j < M; j++){
if(p[i][j] == 'W'){
dfs(i, j);
sum++;
}
}
}
cout << sum << endl;
}
}