PKU : 3051 - Satellite Photographs

問題概要

http://poj.org/problem?id=3051

'*' が陸を表すとします.
上下左右に'*'がつながっているひとつのグループを島とします.
このとき, 島の面積の最大を答えてください.

プログラム

int w,h;
int dx[] = {1,-1,0,0};
int dy[] = {0,0,1,-1};
char t[1002][100];

int dfs(int x,int y){
  int res = 1;

  t[y][x] = '.';
  rep(i,4){
    int nx = x + dx[i];
    int ny = y + dy[i];
    if(0 <= nx && nx < w && 0 <= ny && ny < h && t[ny][nx] == '*'){
      res += dfs(nx,ny);
    }
  }
  return res;
}

int main(void){
  scanf("%d%d",&w,&h);
  rep(i,h) scanf("%s",t[i]);

  int ans = 0;
  rep(i,h){
    rep(j,w){
      if(t[i][j] == '*'){
        ans = max(ans,dfs(j,i));
      }
    }
  }
  printf("%d\n",ans);
}