题解
2025-07-31 23:07:18
发布于:北京
5阅读
0回复
0点赞
这个问题要求从二维数组的左上角(array[0][0])开始,按从左上到右下的对角线顺序遍历整个数组,并将元素逐行输出。对角线的特点是:从某点开始,沿着“右上/左下”方向移动,行索引递增(向下),列索引递减(向左)。为了遍历所有元素,可以将对角线分为两部分处理:
第一部分:从第一行的每个列(array[0][j],j 从 0 到 col-1)开始,沿对角线遍历。
第二部分:从最后一列的每个行(array[i][col-1],i 从 1 到 row-1)开始,继续沿对角线遍历。
时间复杂度:O(row × col)
#include <iostream>
using namespace std;
int main() {
int row, col;
cin >> row >> col; // 输入行数和列数
// 输入二维数组
int array[105][105];
for(int i = 0; i < row; i++) {
for(int j = 0; j < col; j++) {
cin >> array[i][j];
}
}
// 第一部分:从第一行的每个列开始,沿对角线遍历
for(int j = 0; j < col; j++) {
int i = 0;
int jj = j;
while(i < row && jj >= 0) {
cout << array[i][jj] << endl;
i++; // 向下移动
jj--; // 向左移动
}
}
// 第二部分:从最后一列的每个行开始,沿对角线遍历
for(int i = 1; i < row; i++) {
int ii = i;
int j = col - 1; // 最后一列
while(ii < row && j >= 0) {
cout << array[ii][j] << endl;
ii++; // 向下移动
j--; // 向左移动
}
}
return 0;
}
这里空空如也
有帮助,赞一个