int main() {
int a = 0, b = 1, d = 9999999, e = 0,p=1,q=1, n = 0, b1, b2, b3, b4, b5, b6, b7, c1 = 0, c2 = 0, c3 = 0, c4 = 0, c5 = 0, c6 = 0, c7 = 0, t = 0;
cin >>n;
int** a1 = (int**)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
a1[i] = (int*)malloc(n * sizeof(int));
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
a1[i][j] = 0;
}
}
a1[0][0] = 1;
while (b <= n*n-1) {
while (b <= n * n - 1) {
b += 1;
q += 1;
a1[p - 1][q - 1] = b;
if (q == n) {
break;
}
if (a1[p - 1][q] != 0) {
break;
}
}
while (b <= n * n - 1) {
b += 1;
p += 1;
a1[p - 1][q - 1] = b;
if (p == n) {
break;
}
if (a1[p][q-1] != 0) {
break;
}
}
while (b <= n * n - 1) {
b += 1;
q -= 1;
a1[p - 1][q - 1] = b;
if (q == 1) {
break;
}
if (a1[p - 1][q-2] != 0) {
break;
}
}
while (b <= n * n - 1) {
b += 1;
p -= 1;
a1[p - 1][q - 1] = b;
if (p == 1) {
break;
}
if (a1[p - 2][q-1] != 0) {
break;
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (a1[i][j] < 10) {
printf(" %d", a1[i][j]);
}
else {
printf(" %d", a1[i][j]);
}
if ((j + 1) % n == 0) {
cout << endl;
}
}
}
return 0;
}
懒得打头文件了,目前已经通过打补丁解决,但是还是好奇为什么这样子会死循环