1562:Oil Deposits

keyword

DFS C++

概要

島の数を数える問題。
DFSで書くだけ。

char board[102][102];
int dx[] = {1,1,0,-1,-1,-1,0,1};
int dy[] = {0,1,1,1,0,-1,-1,-1};

void dfs(int x, int y){
    if(board[x][y] == '*') return ;
    board[x][y] = '*';
    int i;
    REP(i,8) dfs(x+dx[i],y+dy[i]);
    return ;
}

int main(){
    int i, j, n, m;

    while(scanf("%d%d\n",&n,&m)){
        if(!(n||m))break;
        REP(i,102)REP(j,102) board[i][j] = '*';
        REPONE(i,n){
            REPONE(j,m){
                scanf("%c",board[i]+j);
            }
            scanf("\n");
        }
        int ans = 0;
        REPONE(i,n)REPONE(j,m)if(board[i][j]=='@'){
            ans++;
            dfs(i,j);
        }

        printf("%d\n",ans);
    }

    return 0;
}