问题描述:在n*n的方阵里填入1,2,3.....n。要求填成蛇形。当n=5的时候
方阵为:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
思路分析:从1开始填写,设“笔”的坐标为(x,y),一开始x=0,y=0,即第一行第一列,然后笔向右移动.....,笔的运动轨迹为右,右,右,右,下,下,下,下.........。总之,可以得出结论:笔的移动顺序为右,下,左,上,每个方向移动到不能移动为止,即到达数组边界或准备移动的位置已被填过。
代码如下:
#include"stdio.h"
int main(){
int a[20][20]={0};
int n;
scanf("%d",&n);
int x=0,y=0,count=0;
a[x][y]=++count;//填写第一个位置
while(count<n*n){
while(y+1<n&&!a[x][y+1]){
a[x][++y]=++count;
}//笔向右移动,注意:由于&&为短路逻辑符,当y+1<n不成立的时候终止判断,所以不存在a[x][y+1]索引越界问题;
while(x+1<n&&!a[x+1][y]){
a[++x][y]=++count;
}//笔向下移动
while(y-1>=0&&!a[x][y-1]){
a[x][--y]=++count;
}//笔向左移动
while(x-1>=0&&!a[x-1][y]){
a[--x][y]=++count;
}//笔向上移动
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("%3d",a[i][j]);
}
printf("\n");
}
}