本文通过控制走过的圈数来达到输出螺旋矩阵的目的。
对于n阶矩阵,其圈数为(n+1)/2。
#include<stdio.h>
#define N 10
void SetArray(int a[][N],int len,int n);
void PrintArray(int a[][N],int m,int n);
int main()
{
int a[N][N],n;
printf("Input n:");//输入阶数
scanf("%d",&n);
SetArray(a,1,n);//生成螺旋矩阵
PrintArray(a,n,n);//打印螺旋矩阵
return 0;
}
void SetArray(int a[][N],int len,int n)
{
int m,k,level;
level=n>0?(n+1)/2:-1;//圈数
for (m=0;m<level;m++){//控制走过圈数
for (k=m;k<n-m;k++){//top,所在圈的最上一行
a[m][k]=len++;
}
for (k=m+1;k<n-m-1;k++){//right,所在圈的最右一列
a[k][n-m-1]=len++;
}
for (k=n-m-1;k>m;k--){//bottom,所在圈的最下一行
a[n-m-1][k]=len++;
}
for (k=n-m-1;k>m;k--){//left,所在圈的最左一列
a[k][m]=len++;
}
}
}
void PrintArray(int a[][N],int m,int n)
{
for (int i=0;i<m;i++){
for (int j=0;j<n;j++){
printf("%d\t",a[i][j]);
}
printf("\n");
}
}