1. 程式人生 > >lake counting (dfs)

lake counting (dfs)

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int N, M;
 4 char field[3][3] =
 5 {
 6     { 'W','*','*'},
 7     { '*','W','*'},
 8     { '*','*','*'},
 9 };
10 void dfs(int x,int y) {
11     field[x][y] = '*';
12     
13     for (int dx = -1; dx <= 1; dx++){
14         for (int dy = -1
; dy <= 1; dy++) { 15 int nx = x + dx, ny = y + dy; 16 if (0 <= nx && nx < N && 0 <= ny && ny < M&&field[nx][ny] == 'W') 17 dfs(nx, ny); 18 } 19 } 20 return; 21 } 22 23 void solve() { 24 int res = 0
; 25 for (int i = 0; i < N; i++) { 26 for (int j = 0; j < M; j++) { 27 if (field[i][j] == 'W') { 28 dfs(i, j); 29 res++; 30 } 31 } 32 } 33 printf("%d", res); 34 } 35 36 int main() { 37 scanf("%d%d", &N,&M);
38 solve(); 39 // system("pause"); 40 return 0; 41 }

從任意w 開始 不停地把臨接部分用“*”代替

直到圖中不再存在W