给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 c++;
时间: 2024-09-30 08:06:04 浏览: 45
在C++中,给定一个m x n的矩阵并实现这样的功能,你可以采用动态规划的方式。首先,你需要一个二维数组来存储原始矩阵,然后创建两个一维数组分别记录每一行和每一列的非零元素的位置。遍历矩阵的同时,检查每个元素是否为0,如果是,则更新对应的行和列。
以下是一个简单的示例代码:
```cpp
#include <vector>
void setZeroes(std::vector<std::vector<int>>& matrix) {
int rows = matrix.size();
if (rows == 0) return; // 矩阵为空
std::vector<int> row zeroes(rows, 0);
std::vector<int> col zeroes(n, 0);
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < n; ++j) {
if (matrix[i][j] == 0) {
zeroes[i] = 1;
zeroes[j] = 1;
}
}
}
// 更新矩阵
for (int i = 0; i < rows; ++i) {
if (zeroes[i]) {
for (int j = 0; j < n; ++j) {
matrix[i][j] = 0;
}
}
}
// 同理,处理列
for (int j = 0; j < n; ++j) {
if (zeroes[j]) {
for (int i = 0; i < rows; ++i) {
matrix[i][j] = 0;
}
}
}
}
// 示例
int main() {
std::vector<std::vector<int>> matrix = {{1, 1, 0}, {1, 0, 1}, {0, 1, 1}};
setZeroes(matrix);
for (const auto& row : matrix) {
for (int val : row) {
std::cout << val << " ";
}
std::cout << "\n";
}
return 0;
}
```
阅读全文