C ++布尔矩阵
布尔矩阵是只有两个元素0和1的矩阵。对于这个布尔矩阵问题,我们有一个布尔矩阵arr[m][n],大小为mXn。解决的条件是,如果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