【描述】
给定一个行列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个数组。如图所示:
【输入】
输入的第一行上有两个整数,依次为和。
余下有行,每行包含个整数,构成一个二维整数数组。
(注:输入的和保证)
【输出】
按遍历顺序输出每个整数。每个整数占一行。
【样例输入】
4 4
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
【样例输出】
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
【参考程序】
C++版本
- #include <iostream>
- using namespace std;
- int main()
- {
- int arr[105][105] = { 0 };
- int row, col;
- cin >> row >> col;
- // 为二维数组赋值
- for (int i = 0;i < row;i++)
- {
- for (int j = 0;j < col;j++)
- {
- cin >> arr[i][j];
- }
- }
- //左上角(a,b),右下角(c,d)
- int a = 0, b = 0, c = row - 1, d = col - 1;
- int cnt = row * col;
- while (cnt > 0)
- {
- // 避免一行或者一列情况的溢出,需要加cnt>0这个条件
- for (int j = b;j <= d && cnt > 0;j++)
- {
- cout << arr[a][j] << endl;
- cnt -= 1;
- }
- for (int i = a + 1;i <= c && cnt > 0;i++)
- {
- cout << arr[i][d] << endl;
- cnt -= 1;
- }
- for (int j = d - 1;j >= b && cnt > 0;j--)
- {
- cout << arr[c][j] << endl;
- cnt -= 1;
- }
- for (int i = c - 1;i >= a + 1 && cnt > 0;i--)
- {
- cout << arr[i][b] << endl;
- cnt -= 1;
- }
- a += 1;
- b += 1;
- c -= 1;
- d -= 1;
- }
- return 0;
- }