以螺旋顺序打印二维数组

如何以螺旋顺序打印5×5二维数组?

有没有公​​式可以让我按螺旋顺序打印任何大小的数组?

回答:

想法是将矩阵视为一系列层,右上层和左下层。要以螺旋方式打印矩阵,我们可以从这些矩阵中剥离图层,打印被剥离的部分,然后递归地调用左边部分的打印。当我们没有更多可打印的层时,递归终止。

1 2 3 4 

5 6 7 8

9 0 1 2

3 4 5 6

7 8 9 1

 1 2 3 4 

8

5 6 7 2

9 0 1 6

3 4 5 1

7 8 9

   6 7

5 0 1

9 4 5

3

7 8 9

    6 7

1

0 5

4

  0

4

递归终止。


// function to print the top-right peel of the matrix and 

// recursively call the print bottom-left on the submatrix.

void printTopRight(int a[][COL], int x1, int y1, int x2, int y2) {

int i = 0, j = 0;

// print values in the row.

for(i = x1; i<=x2; i++) {

printf("%d ", a[y1][i]);

}

// print values in the column.

for(j = y1 + 1; j <= y2; j++) {

printf("%d ", a[j][x2]);

}

// see if more layers need to be printed.

if(x2-x1 > 0) {

// if yes recursively call the function to

// print the bottom left of the sub matrix.

printBottomLeft(a, x1, y1 + 1, x2-1, y2);

}

}

// function to print the bottom-left peel of the matrix and

// recursively call the print top-right on the submatrix.

void printBottomLeft(int a[][COL], int x1, int y1, int x2, int y2) {

int i = 0, j = 0;

// print the values in the row in reverse order.

for(i = x2; i>=x1; i--) {

printf("%d ", a[y2][i]);

}

// print the values in the col in reverse order.

for(j = y2 - 1; j >= y1; j--) {

printf("%d ", a[j][x1]);

}

// see if more layers need to be printed.

if(x2-x1 > 0) {

// if yes recursively call the function to

// print the top right of the sub matrix.

printTopRight(a, x1+1, y1, x2, y2-1);

}

}

void printSpiral(int arr[][COL]) {

printTopRight(arr,0,0,COL-1,ROW-1);

printf("\n");

}

以上是 以螺旋顺序打印二维数组 的全部内容, 来源链接: utcz.com/qa/418759.html

回到顶部