http://101.200.220.237/contest/49/problem/283/
小蝌蚪安家
在一个矩形区域内,有些地方有水,有些地方没水。所有相邻的有水的地方会共同组成一个水洼,小蝌蚪想在这块区域中找到一个最大的水洼来安家。
有多组输入数据,每组第一行包含两个正整数n,m(n,m<=100),接下来n行,每行m个字符,“.”表示有水,“#”表示没水。
对于每组输入数据输出一行,包含一个整数,表示最大的水洼的面积。
复制
3 3 ### ### ##.
1
复制
2 3 #.. ..#
4
复制
3 3 ##. #.. .##
3
这是一道比较简单基础的dfs题目,代码如下:
#include <stdio.h> #include<iostream> #pragma warning(disable:4996); using namespace std; #include<set> #include<algorithm> #include<cstdio> //#include<iostream> //#include<algorithm> #include<cstring> using namespace std; int n, m;//n行,每行m个字符 int sum, s; int an[110][110]; char bn[110][110]; void dfs(int i, int j) { if (i >= n || i < 0 || j < 0 || j >= m) return; if (an[i][j] == -1) return; if (an[i][j] == 1) return; an[i][j] = 1; s++; dfs(i + 1, j); dfs(i, j + 1); dfs(i, j - 1); dfs(i - 1, j); if (s > sum) sum = s; } int main() { while (scanf("%d %d\n", &n, &m) != EOF) { int i, j; for (i = 0; i<n; i++) for (j = 0; j < m; j++) { scanf("\n"); scanf("%c", &bn[i][j]); if (bn[i][j] == '#') an[i][j] = -1; if (bn[i][j] == '.') an[i][j] = 0; } sum = 0; for (i = 0; i<n; i++) for (j = 0; j < m; j++) { dfs(i, j); s = 0; } printf("%d\n",sum); } return 0; }