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
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP