(C++)对于给定行数 m 和列数 n 的二维数组,螺旋输出二维数组的元素。 输入样例: 3 4 1 2 3 4 5 6 7 8 9 10 11 12 输出样例: 1 2 3 4 8 12 11 10 9 5 6 7
时间: 2023-06-20 13:07:51 浏览: 34
这道题可以先模拟一下螺旋输出的过程,可以发现先从左到右输出第一行,再从上到下输出最后一列,再从右到左输出最后一行,最后从下到上输出第一列。然后不断重复这个过程,直到输出完所有的元素。
具体实现可以使用四个变量来记录当前要输出的行和列的范围,分别是left、right、top、bottom。每次按照上述顺序输出当前范围内的元素,然后调整变量的值,再重复这个过程,直到所有元素都被输出。
代码如下:
```
#include <iostream>
#include <vector>
using namespace std;
void spiralOrder(vector<vector<int>>& matrix) {
int m = matrix.size(), n = matrix[0].size();
int left = 0, right = n - 1, top = 0, bottom = m - 1;
while (left <= right && top <= bottom) {
// 从左到右输出第一行
for (int j = left; j <= right; j++) {
cout << matrix[top][j] << " ";
}
top++;
// 从上到下输出最后一列
for (int i = top; i <= bottom; i++) {
cout << matrix[i][right] << " ";
}
right--;
// 从右到左输出最后一行
if (top <= bottom) {
for (int j = right; j >= left; j--) {
cout << matrix[bottom][j] << " ";
}
bottom--;
}
// 从下到上输出第一列
if (left <= right) {
for (int i = bottom; i >= top; i--) {
cout << matrix[i][left] << " ";
}
left++;
}
}
}
int main() {
int m, n;
cin >> m >> n;
vector<vector<int>> matrix(m, vector<int>(n));
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cin >> matrix[i][j];
}
}
spiralOrder(matrix);
return 0;
}
```