本文地址:http://www.javashuo.com/article/p-hfoknwkc-db.htmlhtml
題目名稱:Lake Countingide
連接:http://poj.org/problem?id=2386spa
題意:在一個 N*M 的園子裏,"W"表明水,"."表明乾地。每一個地方的八個相鄰方向都認爲是連在一塊兒的,計算有多少攤水。code
思路:所有便利一次,遇到"W"就DFS判斷相連的,並統計和改爲".",計算DFS的次數。htm
代碼以下:blog
1 #include<cstdio>
2 using namespace std; 3 char field[105][105]; 4 int n,m; 5 void dfs(int x, int y) { 6 field[x][y] = '.'; 7 for(int dx = -1; dx <= 1; ++dx) { 8 for(int dy = -1; dy <= 1; ++dy) { 9 int xx = x + dx; 10 int yy = y + dy; 11 if(xx >= 0 && yy >= 0 && xx < n && yy < m && field[xx][yy] == 'W') { 12 dfs(xx, yy); 13 } 14 } 15 } 16 return ; 17 } 18 int main() { 19 while(scanf("%d%d", &n, &m) != EOF) { 20 for(int i = 0; i < n; ++i) { 21 getchar(); 22 for(int j = 0; j < m; ++j) { 23 scanf("%c", &field[i][j]); 24 } 25 } 26 int cnt = 0; 27 for(int i = 0; i < n; ++i) { 28 for(int j = 0; j < m; j++) { 29 if(field[i][j] == 'W') { 30 dfs(i, j); 31 ++cnt; 32 } 33 } 34 } 35 printf("%d\n", cnt); 36 } 37 return 0; 38 }