3051:Satellite Photographs
keyword
DFS C++
概要
ボード(1000*80以下)が与えられる。各セルは牧草地であるかそうでないかの2種類。牧草地が繋がっているのをひとまとめにして考えるとき、最大のクラスタの大きさを求める問題。
よくある探索の問題。書くだけなのにWAくらってびっくり。配列のインデックスを逆にしていたことに気付く。board[y][x]の形式に自分を慣らしておかないと。
char board[1002][100]; int dx[] = {1,0,-1,0}, dy[] = {0,1,0,-1}; int w, h; int cnt, best; void dfs(int x, int y){ if(x<0||w<=x||y<0||h<=y || board[y][x]!='*'){ best = max(cnt, best); return ; } cnt++; board[y][x] = '.'; int i; REP(i,4)dfs(x+dx[i],y+dy[i]); return ; } int main(){ int i,j; best = 0; scanf("%d%d\n",&w,&h); REP(i,h){ scanf("%s\n",board[i]); } REP(i,h)REP(j,w){ cnt = 0; dfs(j,i); } printf("%d\n",best); return 0; }