C ++中的布尔矩阵问题?
在这里,我们将看到一个有趣的布尔矩阵问题。给出了一个布尔矩阵,其中包含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 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
热门推荐
10 八一幼儿祝福语大全简短
11 公司乔迁食堂祝福语简短
12 婚礼结束聚餐祝福语简短
13 儿媳买车妈妈祝福语简短
14 毕业送礼老师祝福语简短
15 同事辞职正常祝福语简短
16 恭贺新婚文案祝福语简短
17 金店立秋祝福语简短英文
18 婆婆高寿祝福语大全简短