poj 2612 扫雷 模拟

题意:开始输出雷的分布,然后输出操作,X代表点在这个区域上,分为两种情况,如果没有踩到雷,那么输出这个地方周围雷的个数,没有操作的点输出“.”,踩到雷的话,把所有雷的地方输出“*”,然后操作的地方输出周围雷的个数。

挺容易的,但是WA了 半天。。。后来还是看了依然的报告,写的很简洁~ o(︶︿︶)o 唉。。差距

#include<iostream>
using namespace std;
int dir[8][2]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};
int main() {
    int a[15][15];
    bool touch[15][15],mine[15][15];
    int n;
    char c;
    while (scanf("%d",&n)!=EOF) {
        memset(a,0,sizeof(a));
        memset(mine,false,sizeof(mine));
        memset(touch,false,sizeof(touch));
        for (int i = 0 ; i < n ; i ++)
            for (int j = 0 ; j < n ; j ++) {
                cin>>c;
                if (c == '*') {
                    mine[i][j] = true;
                    for (int k = 0 ; k < 8 ; k ++) {
                        int tx = i + dir[k][0];
                        int ty = j + dir[k][1];
                        a[tx][ty] ++;    //这样就记录了一个地方周围雷的个数 
                    }    
                }    
            }
        bool flag = false;
        for (int i = 0 ; i < n ; i ++)
            for (int j = 0 ; j < n ; j ++) {
                cin>>c;
                if (c == 'x') { 
                    touch[i][j] = true;
                    if (mine[i][j]) flag = true;
                }    
            }
        if (flag) {//踩到雷 
            for (int i = 0 ; i < n ; i ++) {
                for (int j = 0 ; j < n ; j ++) {
                    if (mine[i][j]) printf("*");
                    else {
                        if (touch[i][j]) printf("%d",a[i][j]);
                        else printf(".");    
                    }    
                }
                printf("\n");    
            }    
        } else { //没踩到 
            for (int i = 0 ; i < n ; i ++){
                for (int j = 0 ; j < n ; j ++) {
                    if (touch[i][j]) printf("%d",a[i][j]);
                    else printf(".");    
                }
                printf("\n");    
            }    
        }    
    }    
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值