仅供参考:
#include
#define MAXN 100
int m[MAXN+2][MAXN+2];
char d;
int x,y,k,n,w;
char str[10];
void main() {
while (1) {
printf("Input n(1..%d):",MAXN);
fflush(stdout);
rewind(stdin);
if (1==scanf("%d",&n)) {
if (1<=n && n<=MAXN) break;
}
}
y=0 ;for (x=0;x<=n+1;x++) m[y][x]=1;
y=n+1;for (x=0;x<=n+1;x++) m[y][x]=1;
x=0 ;for (y=0;y<=n+1;y++) m[y][x]=1;
x=n+1;for (y=0;y<=n+1;y++) m[y][x]=1;
for (y=1;y<=n;y++) {
for (x=1;x<=n;x++) {
m[y][x]=0;
}
}
x=1;
y=1;
k=0;
d=""D"";
while (1) {
k++;
if (k>n*n) break;
m[y][x]=k;
switch (d) {
case ""D"":
if (0==m[y+1][x]) y++;
else {x++;d=""R"";}
break;
case ""R"":
if (0==m[y][x+1]) x++;
else {y--;d=""U"";}
break;
case ""U"":
if (0==m[y-1][x]) y--;
else {x--;d=""L"";}
break;
case ""L"":
if (0==m[y][x-1]) x--;
else {y++;d=""D"";}
break;
}
}
w=sprintf(str,"%d",n*n);
for (y=1;y<=n;y++) {
for (x=1;x<=n;x++) {
printf(" %0*d",w,m[y][x]);
}
printf("\n");
}
}