poj 3620 Avoid The Lakes
#include<iostream> //dfs
using namespace std;
bool visited[105][105],rec[105][105];
int n,m,k,s,ans[8]={-1,0,1,0,0,-1,0,1};
void dfs(int r,int c)
{
s++;visited[r][c]=1;
for(int i=0;i<4;++i)
{
int a=ans[2*i],b=ans[2*i+1];
if(r+a>=1&&r+a<=n&&c+b>=1&&c+b<=m && rec[r+a][c+b]&&!visited[r+a][c+b])
dfs(r+a,c+b);
}
}
int main()
{
int a,b,res=0;
cin>>n>>m>>k;
for(int i=0;i<k;++i)
{
cin>>a>>b;
rec[a][b]=1;
}
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
if(rec[i][j]&&!visited[i][j])
{
s=0;
dfs(i,j);
res=max(res,s);
}
cout<<res<<endl;
return 0;
}