【2016江苏省小学生夏令营选拔】小 X 学游泳

题目描述

小 X 想要学游泳。
这天,小 X 来到了游泳池,发现游泳池可以用 N 行 M 列的格子来表示,每个格子的面积都是 1,且格子内水深相同。
由于小 X 刚刚入门,他只能在水深相同的地方游泳。为此,他把整个游泳池看成若干片区域,如果两个格子相邻(上下左右四个方向)且水深相同,他就认为它们属于同一片区域。
小 X 想知道最大的一片区域面积是多少,希望你帮帮他。

输入

第一行包含用一个空格隔开的两个整数 N,M。
接下来 N 行,每行包含 M 个 1 到 9 的数字,表示每个格子的水深。

输出

第一行包含一个整数,表示最大的一片区域面积。

样例输入

3 3
124
224
152

样例输出

3

数据范围限制

对于 30%的数据,1≤N,M≤3。
对于 60%的数据,1≤N,M≤10。
对于 100%的数据,1≤N,M≤100。

数据很小,搜索就OK。

//看我写的另一篇最大黑区域,思路是一样的//

//真不是我懒:) ----->别不看思路就copy代码,对你没好处。。。

代码:

#include <bits/stdc++.h>
using namespace std;
int n, m, a[105][105], sum, ans = 0, s;
char ch;

void dfs(int x, int y)
{
	sum++;
	a[x][y] = -1;
	if (a[x + 1][y] == s)
		dfs(x + 1, y);
	if (a[x - 1][y] == s)
		dfs(x - 1, y);
	if (a[x][y + 1] == s)
		dfs(x, y + 1);
	if (a[x][y - 1] == s)
		dfs(x, y - 1);
}

main()
{
	freopen("swim.in","r",stdin);
	freopen("swim.out","w",stdout);
	scanf("%d%d", &n, &m);
	getchar();
	for (int i = 1; i <= n; i++)
		{
			for (int j = 1; j <= m; j++)
				{
					scanf("%d", &a[i][j]);
				}
		}
	for (int i = 1; i <= n; i++)
		{
			for (int j = 1; j <= m; j++)
				{
					if (a[i][j] != -1)
						{
							s = a[i][j];
							sum = 0;
							dfs(i, j);
							ans = max(sum, ans);
						}
				}
		}
	printf("%d", ans);
}

就这样,晚安!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值