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

Ma trận Boolean C ++

Ma trận boolean là ma trận chỉ có hai phần tử 0 và 1. Đối với câu hỏi Ma trận boolean này, chúng ta có ma trận boolean arr [m] [n] có kích thước mXn. Và điều kiện để giải là, nếu m [i] [j] =1 thì m [i] =1 và m [j] =1 có nghĩa là tất cả các phần tử của hàng thứ i và cột thứ j sẽ trở thành 1.

Hãy lấy một ví dụ,

Input: arr[2][2] = 1 0
                   0 0
Output: arr[2][2] = 1 1
                    1 0

Giải thích - arr [0] [0] =1 có nghĩa là arr [0] [0] =arr [0] [1] =1 &arr [0] [0] =arr [1] [0] =1.

Ở đây, chúng tôi sẽ lấy hai biến cờ và kiểm tra xem các hàng và cột có cần được thay đổi thành một trong các biến không. Nếu có thì cờ =1 nếu không thì bằng 0. Và sau đó dựa trên giá trị cờ này, chúng ta sẽ thay đổi giá trị của các phần tử của hàng và cột. Chúng ta sẽ thực hiện quy trình tương tự cho tất cả các phần tử của mảng.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
const int R = 3;
#define C 4
void matrixflip(int mat[R][C]) {
   int row_flag = 0;
   int col_flag = 0;
   for (int i = 0; i < R; i++) {
      for (int j = 0; j < C; j++) {
         if (i == 0 && mat[i][j] == 1)
            row_flag = 1;
         if (j == 0 && mat[i][j] == 1)
            col_flag = 1;
         if (mat[i][j] == 1) {
            mat[0][j] = 1;
            mat[i][0] = 1;
         }
      }
   }
   for (int i = 1; i < R; i++) {
      for (int j = 1; j < C; j++) {
         if (mat[0][j] == 1 || mat[i][0] == 1) {
            mat[i][j] = 1;
         }
      }
   }
   if (row_flag) {
      for (int i = 0; i < C; i++) {
         mat[0][i] = 1;
      }
   }
   if (col_flag) {
      for (int i = 0; i < R; i++) {
         mat[i][0] = 1;
      }
   }
}
int main() {
   int mat[R][C] = { { 1, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 1, 0 } };
   cout << "Input Matrix :\n";
   for (int i = 0; i < R; i++) {
      for (int j = 0; j < C; j++) {
         cout << mat[i][j]<<" ";
      }
      cout <<endl;
   }
   matrixflip(mat);
   cout << "Matrix after bit flip :\n";
   for (int i = 0; i < R; i++) {
      for (int j = 0; j < C; j++) {
         cout << mat[i][j]<<" ";
      }
      cout <<endl;
   }
   return 0;
}

Đầu ra

Input Martix:
1 0 0 0
0 0 0 0
0 0 1 0
Matirx after bit flip :
1 1 1 1
1 0 1 0
1 1 1 1