Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm ô an toàn trong ma trận trong C ++

Giả sử chúng ta có một mat ma trận [] []. Nó có ký tự Z và P. Chữ Z là thây ma và P là thực vật. Và một nhân vật khác * là một vùng đất trống. Thây ma có thể tấn công cây trồng khi cây trồng tiếp giáp với thây ma. Chúng ta phải tìm số lượng thực vật an toàn trước zombie. Giả sử ma trận giống như bên dưới -

Tìm ô an toàn trong ma trận trong C ++

Vì vậy, chỉ có hai nhà máy là an toàn.

Chúng tôi sẽ duyệt qua phần tử ma trận theo phần tử, sau đó khi phần tử hiện tại là cây, thì hãy kiểm tra xem cây đó có bị zombie bao quanh hay không, nếu không thì hãy tăng số lượng.

Ví dụ

#include<iostream>
using namespace std;
bool isZombie(int i, int j, int r, int c, string mat[]) {
   if (i < 0 || j < 0 || i >= r || j >= c || mat[i][j] != 'Z')
      return false;
      return true;
}
int countSafeCells(string matrix[], int row, int col) {
   int i, j, count = 0;
   for (i = 0; i < row; i++) {
      for (j = 0; j < col; j++) {
         if (matrix[i][j] == 'P') {
            if (!isZombie(i - 1, j - 1, row, col, matrix) && !isZombie(i - 1, j, row, col, matrix)
               && !isZombie(i - 1, j + 1, row, col, matrix) && !isZombie(i, j - 1, row, col, matrix)
               && !isZombie(i, j, row, col, matrix) && !isZombie(i, j + 1, row, col, matrix)
               && !isZombie(i + 1, j - 1, row, col, matrix) && !isZombie(i + 1, j, row, col, matrix)
               && !isZombie(i + 1, j + 1, row, col, matrix)) {
               count++;
            }
         }
      }
   }
   return count;
}
int main() {
   string mat[] = { "**P*", "Z***", "*P**", "***P" };
   int row = sizeof(mat) / sizeof(mat[0]);
   int col = mat[0].length();
   cout << "Number of safe cells: " << countSafeCells(mat, row, col);
}

Đầu ra

Number of safe cells: 2