ที่นี่เราจะเห็นปัญหาเมทริกซ์บูลีนที่น่าสนใจ ให้เมทริกซ์บูลีนหนึ่งตัวซึ่งมี 0 และ 1 เป้าหมายของเราคือค้นหาตำแหน่งที่ 1 ถูกทำเครื่องหมาย หาก 1 ถูกทำเครื่องหมายที่ตำแหน่ง mat[i,j] เราจะสร้างรายการทั้งหมดเป็น 1 ของแถว i และคอลัมน์ j เรามาดูตัวอย่างกัน หากเมทริกซ์อยู่ด้านล่าง −
1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0
จากนั้นหลังจากแก้ไขแล้วจะเป็น −
1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1
อัลกอริทึม
matrixUpdate(matrix[R,C])
begin define two matrices row[R] and col[C], and fill them with 0 mark the row and column indices of mat[R,C] where 1 is placed into the row[R] and col[C] matrices check row[R] and col[C] if the place is marked, then fill all places of that row and column with 1’s. end
ตัวอย่าง
#include <iostream> #define R 4 #define C 4 using namespace std; void updateMatrix(bool mat[R][C]) { bool row[R]; bool col[C]; int i, j; for (int i = 0; i < R; i++) { //set all elements of row matrix as 0 row[i] = 0;} for (i = 0; i < C; i++) { //set all elements of col matrix as 0 col[i] = 0;} for (int i = 0; i < R; i++) { //mark row and col matrix to identify where 1 is present for (int j = 0; j < C; j++) { if (mat[i][j] == 1) { row[i] = 1; col[j] = 1; } } } for (i = 0; i < R; i++) { //set all 1s to the row and col, where 1 is marked for (j = 0; j < C; j++) { if ( row[i] == 1 || col[j] == 1 ) { mat[i][j] = 1; } } } } void displayMatrix(bool mat[R][C]) { for (int i = 0; i < R; i++) { for (int j = 0; j < C; j++) { cout << mat[i][j]; } cout << endl; } } main() { bool mat[R][C] = { {1, 0, 0, 1}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 1, 0, 0} }; cout << "Given Matrix" << endl; displayMatrix(mat); updateMatrix(mat); cout << "Updated Matrix" << endl; displayMatrix(mat); }
ผลลัพธ์
Given Matrix 1001 0000 0000 0100 Updated Matrix 1111 1101 1101 1111