如何顺时针螺旋输出矩阵数组

昨天展示了如何生成一个顺时针旋转矩阵数组(查看),今天就来逆向思维一下,如何顺时针螺旋输出一个矩阵。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <stdio.h>
int arr[5][5] = {
{ 1, 2, 3, 4, 5},
{ 16, 17, 18, 19, 6},
{ 15, 24, 25, 20, 7},
{ 14, 23, 22, 21, 8},
{ 13, 12, 11, 10, 9},
};
int main(int argc, const char * argv[]) {
// 初始的区间坐标,根据初始矩阵的大小设定
int startX = 0, endX = 4;
int startY = 0, endY = 4;
while(startX<=endX && startY<=endY) // 循环条件
{
int i;
for(i=startX; i<=endX; i++){ // 输出上边的行
printf("%d ",arr[startY][i]);
}
startY ++; // 行的开始坐标增加
for(i=startY; i<=endY; i++){ // 输出右边的列
printf("%d ",arr[i][endX]);
}
endX --; // 列的结束坐标减小
for(i=endX; i>=startX; i--){ // 输出下边边的行
printf("%d ",arr[endY][i]);
}
endY --; // 行的结束坐标减小
for(i=endY; i>=startY; i--){ // 输出左边的列
printf("%d ",arr[i][startX]);
}
startX ++; // 列的开始坐标增加
}
printf("\n");
return 0;
}

上述5*5的螺旋矩阵运行后的结果

扩展阅读

Jackson wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
如果你觉得我的文章还不错,欢迎打赏~