Description Farmer John's farm was flooded in the most recent storm, a fact only aggravated by the information that his cows are deathly afraid of water. His insurance agency will only repay him, however, an amount depending on the size of the largest "lake" on his farm. Input * Line 1: Three space-separated integers: N, M, and K Output * Line 1: The number of cells that the largest lake contains. Sample Input 3 4 5 3 2 2 2 3 1 2 3 1 1 Sample Output 4 Source |
用DFS从左上角开搜,如果碰到湖水,就把他填平。
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; bool map[105][105]; int n, m, k; int dfs(int x, int y) { if (!map[x][y] || x < 1|| y < 1 || x > n || y > m) return 0; else { map[x][y] = false; return 1+dfs(x, y+1)+dfs(x, y-1)+dfs(x+1, y)+dfs(x-1, y); } } int main() { int row, col; while (scanf("%d%d%d", &n, &m, &k) != EOF) { memset(map, false, sizeof(map)); int ans = 0; for (int i = 0; i < k; i++) { scanf("%d%d", &row, &col); map[row][col] = true; } //进行从左上角的遍历,ans统计湖面积最大值。 for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { ans = max(ans, dfs(i, j)); } } printf("%d ", ans); } return 0; }