poj 3051 Satellite Photographs
#include<iostream> //bfs
#include<deque>
#include<string>
using namespace std;
int w,h,m,s,visited[1005][85];
char str[1005][85];
deque<int> col;
void bfs(int i,int j)
{
while(!col.empty())
{
int i=col.front()/10000,j=col.front()%10000;
col.pop_front();
s++;
if(i-1>=0&&str[i-1][j]=='*'&&visited[i-1][j]==0)
col.push_back((i-1)*10000+j),visited[i-1][j]=1;
if(i+1<h&&str[i+1][j]=='*'&&visited[i+1][j]==0)
col.push_back((i+1)*10000+j),visited[i+1][j]=1;
if(j-1>=0&&str[i][j-1]=='*'&&visited[i][j-1]==0)
col.push_back(i*10000+j-1),visited[i][j-1]=1;
if(j+1<w&&str[i][j+1]=='*'&&visited[i][j+1]==0)
col.push_back(i*10000+j+1),visited[i][j+1]=1;
}
}
int main()
{
scanf("%d%d",&w,&h);
for(int i=0;i<h;++i)
scanf("%s",str[i]);
for(int i=0;i<h;++i)
for(int j=0;j<w;++j)
{
if(str[i][j]=='.'||visited[i][j]==1)
continue;
col.clear();
s=0;
col.push_back(i*10000+j);
visited[i][j]=1;
bfs(i,j);
m=max(m,s);
}
printf("%d\n",m);
return 0;
}