一、确定起点,arr[high/2][wide/2]
a[H/2][W/2]=0;
二、螺旋填充时,明确高度和宽度的变化
switch(direct){
case UP:i--;break;
case DOWN:i++;break;
case LEFT:j--;break;
case RIGHT:j++;break;
}
三、明确方向的变化,只需要明确此时方向的左边是否默认值
switch(direct){
case UP:
if((a[i][j-1]==-1)&&(j-1>=0)){
direct=LEFT;
}
break;
case DOWN:
if((a[i][j+1]==-1)&&(j+1<W)){
direct=RIGHT;
}
break;
case LEFT:
if((a[i+1][j]==-1)&&(i+1<H)){
direct=DOWN;
}
break;
case RIGHT:
if((a[i-1][j]==-1)&&(i-1>=0)){
direct=UP;
}
break;
}
最后完整代码奉上
#include <stdio.h>
#include<string.h>
#define H 11
#define W 11
enum direct{
UP,DOWN,LEFT,RIGHT
};
int main(int argc, char *argv[])
{
char a[H][W]={0};
int i,j;
memset(a,-1,sizeof(a));
i=H/2;
j=W/2;
int data=1;
a[i][j]=0;
enum direct direct=RIGHT;
while(1){
switch(direct){
case UP:i--;break;
case DOWN:i++;break;
case LEFT:j--;break;
case RIGHT:j++;break;
}
if((i<0||i>=H)||(j<0||j>=W))
break;
a[i][j]=data++;
switch(direct){
case UP:
if((a[i][j-1]==-1)&&(j-1>=0)){
direct=LEFT;
}
break;
case DOWN:
if((a[i][j+1]==-1)&&(j+1<W)){
direct=RIGHT;
}
break;
case LEFT:
if((a[i+1][j]==-1)&&(i+1<H)){
direct=DOWN;
}
break;
case RIGHT:
if((a[i-1][j]==-1)&&(i-1>=0)){
direct=UP;
}
break;
}
}
for(i=0;i<H;i++){
for(j=0;j<W;j++){
printf("%-4d",a[i][j]);
}
printf("\n");
}
printf("\n");
return 0;
}
```