算法设计与分析课后习题3_3
编程打印形如图3_5所示的n*n的方阵
螺旋方阵
```c
#include <stdio.h>
#define MAX 20
int n;//阶乘
int A[MAX][MAX];
int ok(int x,int y)
{
return (0<=x&&x<n&&0<=y&&y<n&&A[x][y]==0);
}
main()
{
int i,j,k,d;
printf("请输入螺旋方阵的阶数n:");
scanf("%d",&n);
//memset(square,0,MAX*MAX*sizeof(int));
for(i=j=d=0,k=1;k<=n*n;++k)//k
{
A[i][j]=k;
switch(d%4)
{
case 0:if(ok(i,j+1))
++j;
else
++d,++i;
break;
case 1:if(ok(i+1,j))
++i;
else
++d,--j;
break;
case 2:if(ok(i,j-1))
--j;
else
++d,--i;
break;
case 3:if(ok(i-1,j))
--i;
else
++d,++j;
}
}
for(i=0;i<n;++i)
{
printf("\n");
for(j=0;j<n;++j)
printf("%4d",A[i][j]);
printf("\n");
}
printf("\n");
return 0;
}
