pku3620 Avoid The Lakes 查找最大连通湖(简单深搜)

题意:有一个n*m大的农场,其中每一方格不是干旱就是潮湿,现在给出k个潮湿的方格信息(即每个潮湿方格的坐标),如果每个方格与其四连通的其中一个方格连通则构成一个湖泊,该湖泊所包含的方格数就是该湖泊的大小,现在要求构成的湖泊中最大的那个湖泊所包含的方格数。

输入:

3 4 5

3 2

2 2

3 1

2 3

1 1
输出:
4

pku3620 Avoid The Lakes 查找最大连通湖(简单深搜)

代码:

#include<iostream>

#include<cmath>

using namespace std;

#define MAX 101

int n, m, k, num, G[MAX][MAX], f[MAX][MAX];

int dir[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};

int dfs(int p, int q)

{

    f[p][q] = 1;

    for (int i = 0; i < 4; i++)

    {

        int x = p + dir[i][0];

        int y = q + dir[i][1];

        if (!f[x][y] && G[x][y])

        {

            num++;

            dfs(x, y);

        }

    }

    return num;

}

int main()

{

    while (cin>>n>>m>>k)

    {

        int ans = 0;

        memset(f, 0, sizeof(f));

        memset(G, 0, sizeof(G));

        while (k--)

        {

            int x, y;

            cin>>x>>y;

            G[x][y] = 1;

        }

        for (int i = 1; i <= n; i++)

          for (int j = 1; j <= m; j++)

          {

              if (!f[i][j] && G[i][j])

              {

                  num = 1;

                  ans = max(ans, dfs(i, j));

              }

          }

        cout<<ans<<endl;

    }

    return 0;

}

 

你可能感兴趣的:(pku)