二维数组模板
矩阵的存储与操作——行优先、遍历、旋转
二维数组
矩阵
遍历
旋转
GESP4
#include <bits/stdc++.h>
using namespace std;
int a[105][105]; // 全局数组自动初始化为0
int main() {
int n, m;
cin >> n >> m;
// 输入
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
cin >> a[i][j];
// 行优先遍历
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++)
cout << a[i][j] << " ";
cout << endl;
}
// 列优先遍历
for (int j = 0; j < m; j++) {
for (int i = 0; i < n; i++)
cout << a[i][j] << " ";
cout << endl;
}
// 顺时针旋转90度(方阵)
int b[105][105];
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
b[j][n-1-i] = a[i][j];
// 对角线遍历
for (int i = 0; i < n; i++)
cout << a[i][i] << " "; // 主对角线
// 行求和
for (int i = 0; i < n; i++) {
int rowSum = 0;
for (int j = 0; j < m; j++) rowSum += a[i][j];
cout << "第" << i << "行和: " << rowSum << endl;
}
return 0;
}
📖 要点说明
- C++ 二维数组行优先存储:
a[i][j]先变 j 再变 i - 大数组定义在全局避免栈溢出
- 旋转 90° 的映射:
b[j][n-1-i] = a[i][j]
⚠️ 常见错误
- 下标写反:
a[j][i]和a[i][j]含义不同 - 旋转公式记错方向
- 大数组定义在局部导致栈溢出