2612:Mine Sweeper

keyword

シミュレーション C++

概要

マインスイーパのボードを復号する問題。書くだけ。

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

int main(){
    char board[12][12];
    char ans[12][12];
    char c;
    int n, i, j, k, cnt;
    bool touched=false;
    REP(i,12)REP(j,12)board[i][j]='.';
    REP(i,12)REP(j,12)ans[i][j]='\0';
    scanf("%d\n",&n);
    REPONE(i,n){
        REPONE(j,n){
            scanf("%c",&board[i][j]);
        }
        scanf("\n");
    }

    REPONE(i,n){
        REPONE(j,n){
            scanf("%c",&c);
            if(c=='x'){
                cnt = 0;
                REP(k,8)if(board[i+dy[k]][j+dx[k]]=='*')cnt++;
                ans[i-1][j-1] = cnt + '0';
                if(board[i][j]=='*') touched = true;
            }
            else ans[i-1][j-1] = '.';
        }
        scanf("\n");
    }

    if(touched)REPONE(i,n)REPONE(j,n)if(board[i][j]=='*')ans[i-1][j-1]='*';

    REP(i,n)printf("%s\n",ans[i]);

    return 0;
}