魔法矩阵(蛇形矩阵)
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int N;
cin >> N;
int **a = new int *[N];
for (int i = 0; i < N; i++) {
a[i] = new int[N];
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
a[i][j] = 0;
}
}
//0向右,1向上,2向左,3向下
int flag = 0;
int i = 1;
int px = (N - 1) / 2;
int py = (N - 1) / 2;
a[px][py] = 1;
while (true) {
if (i == N * N) {
break;
}
i++;
switch (flag) {
case 0:
py++;
a[px][py] = i;
if (a[px - 1][py] == 0)
flag = 1;
break;
case 1:
px--;
a[px][py] = i;
if (a[px][py - 1] == 0)
flag = 2;
break;
case 2:
py--;
a[px][py] = i;
if (a[px + 1][py] == 0)
flag = 3;
break;
case 3:
px++;
a[px][py] = i;
if (a[px][py + 1] == 0)
flag = 0;
break;
default:
break;
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << setw(6) << a[i][j];
}
cout << endl;
}
return 0;
}
输出如下:
3
5 4 3
6 1 2
7 8 9