比赛 搜索题... 评测结果 AAAAAAAAAA
题目名称 最大的湖 最终得分 100
用户昵称 St.Burning\ 运行时间 0.008 s
代码语言 C++ 内存使用 0.33 MiB
提交时间 2014-11-04 18:53:26
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
#include<cmath>
#include<ctime>
using namespace std;
typedef long long INT64;
const int INF=0x7fffffff;
const int MAXN=102;

struct Node{int x,y;};
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
bool Map[MAXN][MAXN],flag[MAXN][MAXN];

int main()
{
	freopen("lake.in","r",stdin);
	freopen("lake.out","w",stdout);
	memset(Map,0,sizeof(Map));
	memset(flag,0,sizeof(flag));
	int N,M,K,x,y;
	scanf("%d%d%d",&N,&M,&K);
	for(int i=1;i<=N;i++)
		for(int j=1;j<=M;j++)Map[i][j]=0;
		
	for(int i=1;i<=K;i++){
		scanf("%d%d",&x,&y);
		Map[x][y]=1;
	}
	int Res=0;
	for(int i=1;i<=N;i++){
		for(int j=1;j<=M;j++){
			if(Map[i][j]&&!flag[i][j]){
				queue<Node> Q;
				Q.push((Node){i,j});
				flag[i][j]=1;
				int num=1;
				while(!Q.empty()){
					Node t=Q.front();Q.pop();
					for(int k=0;k<4;k++){
						if(Map[t.x+dx[k]][t.y+dy[k]] &&!flag[t.x+dx[k]][t.y+dy[k]]){
                            flag[t.x+dx[k]][t.y+dy[k]]=1;
                            num++;
                            Q.push((Node){t.x+dx[k],t.y+dy[k]});
						}
					}
				}
				if(num>Res)Res=num;
			}
		}
	}
	printf("%d",Res);
	fclose(stdin);
	fclose(stdout);
	return 0;
}