C++ 布林矩陣


布林矩陣是一個僅包含兩個元素 0 和 1 的矩陣。對於 Boolean Matrix 這個問題,我們有一個大小為 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。如果需要,則 flag = 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

更新於: 2019 年 10 月 7 日

827 次觀看

啟動您的 職業生涯

完成課程,獲得認證

開始
廣告