本关任务:给定一个由二维数组mat表示的m×n矩阵,以及两个正整数r和c,分别表示想要重塑的矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。如果给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。用c++撰写
时间: 2024-10-10 11:17:25 浏览: 147
在这个任务中,你需要编写C++程序来实现对给定二维数组的重塑操作。给定的矩阵`mat`是一个m×n大小的数组,用户希望将其转换成一个新矩阵,形状为r×c。关键在于保持原矩阵元素的行遍历顺序不变。以下是基本步骤:
1. 首先,检查`r * c`是否等于`mat`的总元素数量(即`m * n`)。如果不等,说明重塑操作不合理,直接返回原始矩阵。
2. 创建一个新的r×c维度的二维动态数组(vector<vector<int>>),用于存储重塑后的矩阵。
3. 使用两层循环遍历原始矩阵`mat`。外层按照原始行,内层按照原始列。将每个元素添加到新矩阵对应的位置上,确保新矩阵的行和列是按用户指定的方式组合的。
4. 返回重塑后的矩阵。
下面是简单的伪代码示例:
```cpp
#include <vector>
using namespace std;
vector<vector<int>> reshapeMatrix(vector<vector<int>>& mat, int r, int c) {
int m = mat.size(), n = mat[0].size();
if (r * c != m * n) {
// 如果元素总数不匹配,返回原始矩阵
return mat;
}
vector<vector<int>> newMat(r, vector<int>(c, 0)); // 初始化新矩阵
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
newMat[i / r][i % r] = mat[i][j]; // 根据行遍历顺序填充新矩阵
}
}
return newMat;
}
// 示例
int main() {
vector<vector<int>> mat = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int r = 3, c = 3;
auto reshapedMat = reshapeMatrix(mat, r, c);
// 输出重塑后的矩阵
return 0;
}
```
阅读全文