pku3620 Avoid The Lakes 查找最大连通湖(简单深搜)
题意:有一个n*m大的农场,其中每一方格不是干旱就是潮湿,现在给出k个潮湿的方格信息(即每个潮湿方格的坐标),如果每个方格与其四连通的其中一个方格连通则构成一个湖泊,该湖泊所包含的方格数就是该湖泊的大小,现在要求构成的湖泊中最大的那个湖泊所包含的方格数。
输入:
3 4 5 3 2 2 2 3 1 2 3 1 1
输出:
4
代码:
#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; }