POJ 2386 http://poj.org/problem?id=2386
题目大意:
问有几个八联通区域。
解题思路:
每次遇到W即可进行DFS,并且将W替换成'.',最后统计进行DFS的次数即可。
AC代码:
#include <iostream>
using namespace std;
const int Max = 105;
int ans = 0;
int N, M;
char s[Max][Max];
void dfs(int i,int j) {
s[i][j] = '.';
for(int dx = -1;dx <= 1; dx++) {
for(int dy = -1; dy <= 1; dy++) {
int xx = i + dx;
int yy = j + dy;
if(xx >= 0 && xx < N && yy >= 0 && yy < M &&s[xx][yy] == 'W') dfs(xx,yy);
}
}
return;
}
void solve() {
for(int i = 0;i < N;i++) {
for(int j = 0; j < M; j++) {
if(s[i][j] == 'W') {
dfs(i, j);
ans++;
}
}
}
}
int main() {
cin >> N >> M;
for(int i = 0;i < N;i++) {
for(int j = 0; j < M; j++) {
cin >> s[i][j];
}
}
solve();
cout << ans << endl;
return 0;
}