yuanjun93

Lake Counting(POJ No.2386)

有一个大小为N*M的园子,雨后积起了水。八连通的积水被认为是在一起的。请求出园子里共有多少个水洼?(八连通是指下图中相对w的*部分)

* * *

*w*

* * *

限制条件 N,M ≤ 100

 

思路:

先遍历整个园子,从任意的w开始,把周围所有的w都变成 '.' ,然后遍历完成之后 res 加1

dfs中的操作就是先把当前位置改为'.',然后再把周围上下左右邻近的8个位置全部遍历一遍找w,找到w就从那个w的位置再开始周围8个位置的寻找,一直到周围的w找完为止

int N = 10;
int M = 12;
char field[10][12] = {
    {'w','.','.','.','.','.','.','.','.','w','w','.'},
    {'.','w','w','w','.','.','.','.','.','w','w','w'},
    {'.','.','.','.','w','w','.','.','.','w','w','.'},
    {'.','.','.','.','.','.','.','.','.','w','w','.'},
    {'.','.','.','.','.','.','.','.','.','w','.','.'},
    {'.','.','w','.','.','.','.','.','.','w','.','.'},
    {'.','w','.','w','.','.','.','.','.','w','w','.'},
    {'w','.','w','.','w','.','.','.','.','.','w','.'},
    {'.','w','.','w','.','.','.','.','.','.','w','.'},
    {'.','.','w','.','.','.','.','.','.','.','w','.'},
};

void dfs(int x, int y)
{
    field[x][y] = '.';
    for (int dx = -1; dx <= 1; dx++)
    {
        for (int dy = -1; dy <= 1; dy++)
        {
            int nx = x + dx;
            int ny = y + dy;
            if (field[nx][ny] == 'w')
            {
                dfs(nx, ny);
            }
        }
    }
}

int solve()
{
    int res = 0;
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
            if (field[i][j] == 'w')
            {
                dfs(i, j);
                res++;
            }
        }
    }
    return res;
}

 

分类:

算法

技术点:

相关文章:

  • 2019-11-15
  • 2018-04-13
  • 2020-03-24
  • 2019-07-07
  • 2021-08-03
  • 2018-08-07
  • 2021-07-30
猜你喜欢
  • 2020-03-31
  • 2021-08-01
  • 2019-09-28
  • 2019-12-17
  • 2020-11-09
  • 2018-03-08
相关资源
相似解决方案