题目描述:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
思路:递归打印,处理好边界就OK了
#include <cstdio>
#include <algorithm>
using namespace std;
int n, m;
int deep;
int matrix[1002][1002];
void print(int d){
if(d > deep){
printf("\n");
return;
}
for(int i = d; i <= m-d+1; i++)
printf("%d ", matrix[d][i]);
for(int i = d+1; i <= n-d; i++)
printf("%d ", matrix[i][m-d+1]);
for(int i = m-d+1; n-d+1 != d && i >= d; i--)
printf("%d ", matrix[n-d+1][i]);
for(int i = n-d; d != m-d+1 && i >= d+1; i--)
printf("%d ", matrix[i][d]);
print(d+1);
}
int main()
{
while(scanf("%d%d", &n, &m) != EOF){
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
scanf("%d", &matrix[i][j]);
deep = min(n, m) / 2 + min(n, m) % 2;
print(1);
}
return 0;
}