Gửi bài giải

Điểm: 5,00
Giới hạn thời gian: 2.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C++

Một trong những game từng thống trị trên máy Windows là game dò mìn Minesweeper. Có điều gì đó rất lôi cuốn và gây nghiện trong việc tìm ra những ô nhỏ chứa bom trong trò chơi này. Dù Microsoft không còn đưa Minesweeper vào một phần của OS nữa nhưng điều đó không có nghĩa là bạn không thể chơi game cổ điển mà chưa bao giờ hết hấp dẫn này.

Cho một mảng kích thước M x N. Tại những ô có bãi thì được đánh dấu là -1 còn lại là 0. Nhiệm vụ của bạn là đếm xem xung quanh 1 ô có bao nhiêu bãi mìn (bán kính 1 ô).

Đầu vào: Cho 2 số nguyên M, N (1<= M, N <= 100) và ma trận M x N.

Đầu ra: Ma trận M x N sau khi thực hiện nhiệm vụ

Ví dụ

Input
4 4
0 -1 0 0
0 0 -1 0
0 0 0 0
-1 0 0 0
Output
1 -1 2 1
1 2 -1 1
1 2 1 1
-1 1 0 0

Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 0
    vito120400  đã bình luận lúc 6, Tháng 1, 2024, 7:39

    include <iostream>

    include <vector>

    int countMinesAround(const std::vector<:vector>& matrix, int row, int col, int M, int N) { int count = 0;

    // Duyệt qua các ô xung quanh (bán kính 1 ô)
    for (int i = -1; i <= 1; ++i) {
        for (int j = -1; j <= 1; ++j) {
            int newRow = row + i;
            int newCol = col + j;
    
            // Kiểm tra xem ô mới có hợp lệ không
            if (newRow >= 0 && newRow < M && newCol >= 0 && newCol < N) {
                if (matrix[newRow][newCol] == -1) {
                    count++;
                }
            }
        }
    }
    
    return count;
    

    }

    int main() { int M, N; std::cin >> M >> N;

    std::vector<std::vector<int>> matrix(M, std::vector<int>(N));
    
    // Nhập ma trận
    for (int i = 0; i < M; ++i) {
        for (int j = 0; j < N; ++j) {
            std::cin >> matrix[i][j];
        }
    }
    
    // Đếm số lượng bãi mìn xung quanh mỗi ô và cập nhật ma trận
    for (int i = 0; i < M; ++i) {
        for (int j = 0; j < N; ++j) {
            if (matrix[i][j] != -1) {
                matrix[i][j] = countMinesAround(matrix, i, j, M, N);
            }
        }
    }
    
    // Xuất ma trận sau khi thực hiện nhiệm vụ
    for (int i = 0; i < M; ++i) {
        for (int j = 0; j < N; ++j) {
            std::cout << matrix[i][j] << " ";
        }
        std::cout << std::endl;
    }
    
    return 0;
    

    }