螺旋数组生成的详解
最近想起螺旋数组输出的问题,是当时在大学c语言里的一个课后作业,上网找了答案之后,就交了,至今没弄懂,现在重新思考还是越想越乱,到最后还是放弃了;参考网上大佬的算法,看完之后重写了一遍,并将过程记录在代码中详细说明如何生成。
问题描述:生成任意大小的二维数顺时针螺旋组,例如:
0 1 2 3 4
13 14 15 16 5
12 19 18 17 6
11 10 9 8 7
思路:
- 从最外层逐层填充数组,依次从上、右、下、左四个方向填充;
- 运用递归的方法,填完每一层;
- 递归的出口是填完所有的数据;有三种情况:
- 要填的边长都为0
- 要填的行为1;
- 要填的列为1;
注意:
- 数组的下标范围,防止出现覆盖或者越界;
- 填写数组时的方向;
- 填写中的变量和不变量;
- 填写时局部和整体的关系;
代码详解
/**
* 打印回环数组
*/
public class spiralArray {
public static void main(String[] args) {
int m=4;//行数
int n=5;//列数
int[][] arr=new int[m][n];
fillArray(arr,m,n,0,0);
printArray(arr,m,n);