यहां हम एक रोचक बूलियन मैट्रिक्स समस्या देखेंगे। एक बूलियन मैट्रिक्स दिया गया है जिसमें 0 और 1 हैं। हमारा लक्ष्य यह ढूंढना है कि 1 कहां मार्क किया गया है। यदि 1 स्थिति mat[i,j] पर मार्क किया गया है, तो हम पंक्ति i और स्तंभ j के सभी एंट्रीज को 1 बना देंगे। एक उदाहरण देखते हैं। यदि मैट्रिक्स नीचे जैसा है -
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
आकार R के row[R] और आकार C के col[C] दो मैट्रिक्स परिभाषित करें, और उन्हें 0 से भरें
mat[R,C] की पंक्ति और स्तंभ इंडेक्स को चिह्नित करें जहां 1 रखा गया है, row[R] और col[C] मैट्रिक्स में
row[R] और col[C] की जांच करें यदि स्थान चिह्नित है, तो उस पंक्ति और स्तंभ के सभी स्थानों को 1 से भरें
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++) { // row मैट्रिक्स के सभी तत्वों को 0 सेट करें
row[i] = 0;
}
for (i = 0; i < C; i++) { // col मैट्रिक्स के सभी तत्वों को 0 सेट करें
col[i] = 0;
}
for (int i = 0; i < R; i++) { // row और col मैट्रिक्स को चिह्नित करें जहां 1 मौजूद है
for (int j = 0; j < C; j++) {
if (mat[i][j] == 1) {
row[i] = 1;
col[j] = 1;
}
}
}
for (i = 0; i < R; i++) { // जहां 1 चिह्नित है वहां पंक्ति और स्तंभ के सभी 1 सेट करें
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;
}
}
int 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);
return 0;
}
आउटपुट
Given Matrix 1001 0000 0000 0100 Updated Matrix 1111 1101 1101 1111