เมทริกซ์บูลีนเป็นเมทริกซ์ที่มีเพียงสององค์ประกอบ 0 และ 1 สำหรับคำถามเมทริกซ์บูลีนนี้ เรามีเมทริกซ์บูลีน arr[m][n] ขนาด mXn และเงื่อนไขที่ต้องแก้ไขคือ ถ้า m[i][j] =1 แล้ว m[i] =1 และ m[j] =1 ซึ่งหมายความว่าองค์ประกอบทั้งหมดของแถว ith และคอลัมน์ที่ 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