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
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