UVA 10189 Mineweeper

题目:传送门
看到这种矩阵以为要搜索的,写了想起来只是在查探自己周围的状况,没有下一步的转移,所以不是搜索。

  • 把数组从1开始用可以避免边界问题的麻烦。
  • 注意格式,本题首先需要一个field提示,然后每个矩阵之间需要空行(但最后一个矩阵不需要)。所以先输出空行再输出矩阵。
#include<iostream>
#include<cstdio>
#include<cstring>

using namespace std;

#define ll long long
#define maxn 110

char matrix[maxn][maxn];
int m, n, ans[maxn][maxn];

int step[8][2]={{-1,-1},{0,-1},{1,-1},{1,0},{1,1},{0,1},{-1,1},{-1,0}};

void cnt(int x, int y){
    for(int t = 0;t < 8;t++){
        if(matrix[x+step[t][0]][y+step[t][1]]=='*'){
            ans[x][y]++;
        }
    }
}

int main()
{
    int tc= 0;
    while(scanf("%d%d", &m,&n) && m != 0 && n != 0){
        
        tc++;
        
        memset(matrix, 0, sizeof(matrix));
        memset(ans, 0, sizeof(ans));
        
        for(int i = 1;i <= m;i++){
            getchar();
            for(int j = 1;j <= n;j++){
                scanf("%c", &matrix[i][j]);
            }
        }
        
        if(tc != 1){
            printf("\n");
        }
        
        printf("Field #%d:\n", tc);
        for(int i = 1;i <= m;i++){
            for(int j = 1;j <= n;j++){
                if(matrix[i][j] == '*'){
                    printf("*");
                }
                else{
                    cnt(i, j);
                    printf("%d", ans[i][j]);
                }
            }
            printf("\n");
        }
    }
    
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值