• 题目 1096:扫雷舰


    题目描述

    扫雷艇 你玩过扫雷吗?这个可爱的小游戏带有某个操作系统,我们不记得它的名字了。游戏的目标是找到所有地雷在M x N场内的位置。 游戏在一个正方形中显示一个数字,告诉您该正方形附近有多少地雷。每个方块最多有八个相邻的方块。左侧的 4 x 4 字段包含两个地雷,每个地雷由“*”字符表示。如果我们用上面描述的提示数字表示相同的字段,我们最终会在右侧得到字段: … … .… … 100 2210 110 1110

    输入格式

    输入将由任意数量的字段组成。每个字段的第一行包含两个整数 n 和 m ( 0 < n, m$ \le$100),分别代表字段的行数和列数。接下来的 n 行中的每一行都恰好包含 m 个字符,表示字段。安全方块用“.”表示,地雷方块用“*”表示,两者都没有引号。n = m = 0 的第一字段行表示输入的结束,不应进行处理。

    输出格式

    对于每个字段,仅在一行上打印消息字段 #x:,其中 x 代表从 1 开始的字段编号。接下来的 n 行应包含带有“.”字符的字段,替换为与该方块相邻的地雷数。字段输出之间必须有空行。

    样例输入

    4 4


    .


    3 5
    **…

    .*…
    0 0

    样例输出

    Field #1:
    100
    2210
    1
    10
    1110

    Field #2:
    **100
    33200
    1*100

    #include 
    using namespace std;
    int main(){
        int lie = 0;
        int hang = 0;
        int num = 0;
        while(cin >> hang >> lie && hang!=0 && lie!=0) {
            char road[hang][lie];
            for (int i = 0; i < hang; i++) {
                for (int j = 0; j < lie; j++) {
                    cin >> road[i][j];
                }
            }
            int road2[hang][lie];
            memset(road2, 0, sizeof(road2));  //初始化0
            for (int i = 0; i < hang; i++) {
                for (int j = 0; j < lie; j++) {
                    if (road[i][j] == '*') {
                        road2[i][j] = -1;
                        if (i - 1 >= 0 && road[i - 1][j] != '*') {
                            road2[i - 1][j]++;
                        }
                        if (i + 1 <= hang && road[i + 1][j] != '*') {
                            road2[i + 1][j]++;
                        }
                        if (j - 1 >= 0 && road[i][j - 1] != '*') {
                            road2[i][j - 1]++;
                        }
                        if (j + 1 <= lie && road[i][j + 1] != '*') {
                            road2[i][j + 1]++;
                        }
                        if (i - 1 >= 0 && j - 1 >= 0 && road[i - 1][j - 1] != '*') {
                            road2[i - 1][j - 1]++;
                        }
                        if (i - 1 >= 0 && j + 1 <= hang && road[i - 1][j + 1] != '*') {
                            road2[i - 1][j + 1]++;
                        }
                        if (i + 1 <= lie && j + 1 <= hang && road[i + 1][j + 1] != '*') {
                            road2[i + 1][j + 1]++;
                        }
                        if (i + 1 <= lie && j - 1 >= 0 && road[i + 1][j - 1] != '*') {
                            road2[i + 1][j - 1]++;
                        }
                    }
                }
            }
            num ++;
            cout << "Field #" << num << ":" <<endl;
            for (int i = 0; i < hang; i++) {
                for (int j = 0; j < lie; j++) {
                    if (road2[i][j] != -1) {
                        cout << road2[i][j];
                    } else {
                        cout << "*";
                    }
                }
                cout << endl;
            }
            cout << endl;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
  • 相关阅读:
    计组作业&笔记【 总线 】
    AcWing 1273:天才的记忆 ← ST算法求解RMQ问题
    时序教程六部曲:Kaggle 时间序列实战项目
    吴恩达深度学习笔记:深度学习的 实践层面 (Practical aspects of Deep Learning)1.4-1.5
    kafka
    【Qt-17】Qt调用matlab生成的dll库
    PMP®|项目经理如何应对项目需求变更?
    canal五部曲-如何处理insert幂等性的
    【单词】【2016】
    手写小程序摇树优化工具(七)——生成依赖图
  • 原文地址:https://blog.csdn.net/qq_30534253/article/details/127657962