/*
* 【问题描述】
* 在n*n方阵里填入1,2...,n*n,要求填写成蛇形。例如,n=4时方阵为
* 10 11 12 1
* 9 16 13 2
* 8 15 14 3
* 7 6 5 4
* 上面方阵中,多余空格只是为了便于观察规律,不必严格输出。n<=8
*
* 【问题分析】
* 从1开始依次填写。设“笔”的坐标为(x,y),则一开始 x=0,y=n-1,即第0行,第n-1列。笔的移动轨迹是:
* 下,下,下,左,左,左,上,上,上,右,右,下,下,左,上。总之。先是下,到不能填为之,然
* 后是左,接着是上,最后是右。“不能填”是指再走就出界,或者再走就要走到以前填写的格子。如果把
* 所有的格子初始化为 0,就能很方便地加以判断,
*
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxn 20
int a[maxn][maxn];
int main()
{
int n,x,y,tot=1;
scanf("%d",&n);
memset(a,0,sizeof(a));
x=0;
y=n-1;
a[x][y]=1;
while(tot<n*n)
{
while((x+1)<n && !a[x+1][y])
a[++x][y]=++tot;
while((y-1)>=0 && !a[x][y-1])
a[x][--y]=++tot;
while((x-1)>=0 && !a[x-1][y])
a[--x][y]=++tot;
while((y+1)<n && !a[x][y+1])
a[x][++y]=++tot;
}
for(x=0;x<n;x++)
{
for(y=0;y<n;y++)
printf("%3d",a[x][y]);
printf("\n");
}
system("pause");
return 0;
}
蛇形填数
最新推荐文章于 2023-02-23 17:00:49 发布