#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
int main()
{
int n,i,j;
scanf("%d",&n);
int p[20][20];
memset(p,0,sizeof(p));
// int **p=(int *)malloc(sizeof(int)*n);
/* for(i=0;i<n;i++)
{
p[i]=(int *)malloc(sizeof(int)*n);
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
p[i][j]=0;
}
}*/
int t=1,x=0,y=0;
p[0][0]=1;
while(t<n*n)
{
while(y+1<n&&!p[x][y+1])p[x][++y]=++t;//x=0;y=4
while(x+1<n&&!p[x+1][y])p[++x][y]=++t;//x=4//y=4
while(y-1>=0&&!p[x][y-1])p[x][--y]=++t;//x=4,y=0;
while(x-1>0&&!p[x-1][y])p[--x][y]=++t;
}
// int m=1;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%5d ",p[i][j]);
if(j==n-1)
{
printf("\n");
}
}
}
return 0;
}
首先得定义足够大的数组——控制输出即可(n来控制输出的数组大小)
把大数组全部赋值为零——作为判断依据2!p【x】【y】
然后控制边界(0<x<n,以0<y<n,)
while内之所以是y+1<n而不是y<n是因为控制循环结束后y的值正好为n-1(即为输出的边界值)方便下一次的判断
注意好两个while中的判断,无论蛇的头在哪,都可以用这四个循环jiejue,只不过变一下顺序~~~~