#include<stdio.h>
#include<malloc.h>
//参数说明:matrix :螺旋矩阵 (x,y) :第一个元素的坐标
// start :第一个元素的值 n :矩阵的大小
void SetMatrix(int **matrix, int x, int y, int start, int n)
{
int i, j;
if (n <= 0)
return;
if (n == 1)
{
matrix[x][y] = start;
return;
}
for (j=y; j<y+n-1; j++) /*左边*/
matrix[j][x] = start++;
for (i=x; i<x+n-1; i++) /*下边*/
matrix[y+n-1][i] = start++;
for (j=y+n-1; j>y; j--) /*右边*/
matrix[j][x+n-1] = start++;
for (i=x+n-1; i>x; i--) /*上边*/
matrix[y][i] = start++;
SetMatrix(matrix, x+1, y+1, start, n-2); /* 递归 */
}
void PrintMatrix(int ** matrix, int n) //打印螺旋矩阵
{
int i, j;
for(i=0; i<n; i++)
{
for (j=0; j<n; j++)
printf("%4d", matrix[i][j]);
printf("\n");
}
}
int main()
{
int n, i;
int **matrix; //螺旋矩阵(二维数组)
printf("请输入螺旋矩阵的维数(1-20):");
scanf("%d", &n);
while(n<1 && n>19)
{
printf("您输入的维数不符合要求,请重新输入");
printf("请输入螺旋矩阵的维数(1-20):");
scanf("%d", &n);
}
matrix = (int **)malloc(n * sizeof(int *)); //为矩阵分配空间
for (i=0; i<n; i++)
matrix[i] = (int *)malloc(n * sizeof(int));
SetMatrix(matrix, 0, 0, 1, n);
PrintMatrix(matrix, n); //打印螺旋矩阵
return 0;
}
螺旋矩阵
最新推荐文章于 2017-09-16 15:21:47 发布