Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tìm chữ cái có nhiều sao xung quanh nhất trong ma trận C++

Cho ma trận chứa chữ cái và dấu '*'. Tìm chữ cái có nhiều '*' trong 8 ô lân cận nhất. Nếu bằng nhau, lấy chữ cái nhỏ hơn theo từ điển. Ví dụ: A và C đều có 7 sao, chọn A.

Đếm sao lân cận

Duyệt ma trận. Khi gặp chữ cái, đếm '*' trong 8 hướng. Lưu vào map. Cuối cùng tìm max, ưu tiên ký tự nhỏ hơn.

Ví dụ minh họa

#include <iostream>
#include <unordered_map>
using namespace std;

const int MAX = 4;

int countStars(int mat[][MAX], int x, int y, int n) {
    int dx[8] = {-1,-1,-1,0,0,1,1,1};
    int dy[8] = {-1,0,1,-1,1,-1,0,1};
    int cnt = 0;
    for (int k = 0; k < 8; k++) {
        int nx = x + dx[k], ny = y + dy[k];
        if (nx>=0 && nx=0 && ny mp;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            if (mat[i][j] >= 'A' && mat[i][j] <= 'Z')
                mp[mat[i][j]] = countStars(mat, i, j, n);
    
    int best = -1; char ans = 'Z'+1;
    for (auto& p : mp)
        if (p.second > best || (p.second == best && p.first < ans))
            best = p.second, ans = p.first;
    return ans;
}

int main() {
    int mat[][MAX] = {
        {'B','*','*','*'},
        {'*','*','C','*'},
        {'*','A','*','*'},
        {'*','*','*','D'}
    };
    cout << maxStarChar(mat, 4) << " co nhieu sao nhat";
    return 0;
}

Kết quả

A co nhieu sao nhat