Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++ 부울 행렬

<시간/>

부울 행렬은 0과 1의 두 가지 요소만 있는 행렬입니다. 이 부울 행렬 질문에 대해 mXn 크기의 부울 행렬 arr[m][n]이 있습니다. 그리고 풀어야 할 조건은 m[i][j] =1이면 m[i] =1이고 m[j] =1이면 i번째 행과 j번째 열의 모든 요소가 1이 된다는 뜻입니다.

예를 들어 보겠습니다.

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

설명 - arr[0][0] =1, 즉 arr[0][0]=arr[0][1]=1 &arr[0][0]=arr[1][0]=1입니다.

여기에서는 두 개의 플래그 변수를 사용하여 행과 열을 변경하지 않아도 되는 항목으로 변경해야 하는지 확인합니다. 예 플래그 =1 그렇지 않으면 0입니다. 그런 다음 이 플래그 값을 기반으로 행과 열 요소의 값을 변경합니다. 배열의 모든 요소에 대해 동일한 절차를 수행합니다.

예시

#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;
}

출력

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