#include <stdio.h>
#define N 5 //矩阵长宽
#define DEBUG
int main()
{
int array[N][N];
int x=0,y=0;
int maxx=N-1,maxy=N-1,minx=0,miny=0;
int number=1;
int now=1; //方向 1.down 2.right 3.up 4.left
int flag=1; //判断顺时针还是逆时针
int f=0; //判断是否移动过
printf("1.顺时针 2.逆时针\n");
scanf("%d",&flag);
if (flag==1)
now=2;
else if (flag==2)
now=1;
while(maxx!=minx && maxy!=miny && maxx>=0 && minx >=0 && maxy >=0 && miny >= 0) {
while(x<maxx && now==1) { //down
array[x++][y]=number;
number++;
f=1;
}
if (flag==1 && f==1) {
now=4;
maxy--; //顺时针向下移动后,能到达的最大行减小一
f=0;
}
else if (flag==2) {
now=2; //逆时针向下移动后,能到达的最小行加一
miny++;
}
while(y<maxy && now==2) { //right
array[x][y++]=number;
number++;
f=1;
}
if (flag==1 && f==1) {
now=1;
minx++;
f=0;
}
else if (flag==2) {
now=3;
maxx--;
}
while(x>minx && now==3) { //up
array[x--][y]=number;
number++;
f=1;
}
if (flag==1 && f==1) {
now=2;
miny++;
f=0;
}
else if (flag==2) {
now=4;
maxy--;
}
while(y>miny && now==4) { //left
array[x][y--]=number;
number++;
f=1;
}
if (flag==1 && f==1) {
now=3;
maxx--;
f=0;
}
else if (flag==2) {
now=1;
minx++;
}
}
array[x][y]=number++;
if (flag==1)
array[minx][miny]=number++;
array[maxx][maxy]=number++;
#ifdef DEBUG
int i,j;
for (i=0;i<N;i++) {
for (j=0;j<N;j++) {
printf("%d ",array[i][j]);
}
printf("\n");
}
#endif
return 0;
}