荒天帝


私信TA

用户名:ljhabc

访问量:4036

签 名:

等  级
排  名 433
经  验 4895
参赛次数 1
文章发表 126
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:

注意事项:

参考代码:

#include<bits/stdc++.h>

#define MAX 100 // 地图最大尺寸

 

using namespace std;

 

char position[MAX][MAX]; // 地图

int mark[MAX][MAX];      // 金矿标记

int num = 0;             // 地图数

// 8个方向

int directionX[] = { 1,1,1,0,0,-1,-1,-1 };

int directionY[] = { 1,0,-1,1,-1,1,0,-1 };

// 读输入

int n = 0;

int m = 0;

 

void mineSweep(); // 挖(sao)矿(lei)

int main() {

    // n+m=0 即n, m都为0时结束

    while (cin >> n >> m && (n + m)) {

        memset(position, 0, sizeof(position)); // 初始化地图

        for (int i = 0; i < n; i++) {

            for (int j = 0; j < m; j++) {

                cin >> position[i][j];

                if (position[i][j] != '.' && position[i][j] != '*') {

                    cerr << "DATA ERROR" << endl; // 异常处理

                    return -1;

                }

            }

        }

        mineSweep();

        cout << endl;

    }

    return 0;

}

 

void mineSweep() {

    cout << "Field #" << ++num << ':' << endl;

    memset(mark, 0, sizeof(mark)); // 标记初始化

    for (int i = 0; i < n; i++) {

        for (int j = 0; j < m; j++) {

            if (position[i][j] == '*') {

                mark[i][j] = 9; // 用于解决char和int一起输出会乱码的问题,mark理论最大值为8,如果超过这个值就说明是'*'

                for (int k = 0; k < 8; k++) {

                    // 先判断未出界,再更新mark值

                    if (i + directionX[k] > -1 && i + directionX[k]<n && j + directionY[k]>-1 && j + directionY[k] < m) {

                        mark[i + directionX[k]][j + directionY[k]] += 1;

                    }

                }

            }

        }

    }

    // 输出mark

    for (int i = 0; i < n; i++) {

        for (int j = 0; j < m; j++) {

            if (mark[i][j] > 8) {

                cout << '*'; // 判断为'*',单独输出

            }

            else {

                cout << mark[i][j];

            }

            if (j == m - 1) {

                cout << endl; // 边界换行

            }

        }

    }

}


 

0.0分

0 人评分

  评论区

  • «
  • »