深度优先搜索写“小蝌蚪搬家”

来源:互联网 发布:unix环境高级编程笔记 编辑:程序博客网 时间:2024/06/09 20:13

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;}

原创粉丝点击