UVA 572 - Oil Deposits

这是一道Depth First Search/Breadth First Search的题目。我的implementation是基于DFS的。

算法是这样的:

  loop一遍这个grid:

    如果grid[i][j] == '@':

      对它做DFS。(这个DFS的作用是:以grid[i][j]为root

             把所有跟它在同一个tree里面的字符为'@'的node都变成'*'。)

      然后deposits++

最后输出deposits。

 

话说我AC了哟。

View Code
 1 #include <iostream>
 2 using namespace std;
 3 
 4 int min(int x, int y){
 5     return (x < y)? x : y;
 6 }
 7 
 8 int max(int x, int y){
 9     return (x > y)? x : y;
10 }
11 
12 bool isolated(char grid[][100], int x, int y, int m, int n){
13     for (int i = max(x-1, 0); i <= min(x+1, m-1); i++){
14         for (int j = max(y-1, 0); j <= min(y+1, n-1); j++){
15             if (!(i == x && j == y) && grid[i][j] == '@')
16                 return false;
17         }
18     }
19     return true;
20 }
21 
22 void dfs(char grid[][100], int x, int y, int m, int n){
23     grid[x][y] = '*';
24     if (isolated(grid, x, y, m, n)){
25         return;
26     }
27 
28     for (int i = max(x-1, 0); i <= min(x+1, m-1) ; i++){
29         for (int j = max(y-1, 0); j <= min(y+1, n-1); j++){
30             if (!(i == x && j == y) && grid[i][j] == '@')
31                 dfs(grid, i, j, m, n);
32         }
33     }
34 }
35 
36 int main(int argc, char *argv[]){
37     char grid[100][100];
38     int m, n;
39     cin >> m >> n;
40 
41     while (m != 0){
42         for (int i = 0; i < 100; i++){
43             for (int j = 0; j < 100; j++){
44                 grid[i][j] = ' ';
45             }
46         }
47         for (int i = 0; i < m; i++){
48             cin >> grid[i];
49         }
50 
51         int deposits = 0;
52         for (int i = 0; i < m; i++){
53             for (int j = 0; j < n ; j++){
54                 if (grid[i][j] == '@'){
55                     deposits++;
56                     dfs(grid, i, j, m, n);
57                 }
58             }
59         }
60 
61         cout << deposits << endl;
62         cin >> m >> n;
63     }
64     return 0;
65 }

 

posted @ 2013-01-19 17:48  frankdj  阅读(134)  评论(0)    收藏  举报