首先知道蛇形矩阵的行走路线是不断重复{右->下->左->上}这个过程,可以开一个记录4方向的数组,用一个k值表示方向的选择(用k=(k+1)%4来循环这个选择方向的过程)
然后用一个bool数组来判断某个点是否可以通过,首先矩阵边框是不能通过的(进行预处理),然后每个已经走过的点也是不能通过的,最后按{右->下->左->上}依次通过这些合法的点就形成了蛇形矩阵
C++ 代码
#include <iostream>
using namespace std;
int xx[] = {0, 1, 0, -1};
int yy[] = {1, 0, -1, 0};
int a[105][105];
bool st[105][105];
int main() {
int n, m, cnt = 0;
scanf("%d%d", &n, &m);
int dx = 1, dy = 1, k = 0;
for (int i = 0; i <= m + 1; i++) {
st[0][i] = true;
st[n + 1][i] = true;
}
for (int i = 0; i <= n + 1; i++) {
st[i][0] = true;
st[i][m + 1] = true;
}
while (cnt < n * m) {
if (!st[dx][dy])
a[dx][dy] = ++cnt;
st[dx][dy] = true;
dx += xx[k], dy += yy[k];
if (st[dx][dy]) {
dx -= xx[k], dy -= yy[k];
k = (k + 1) % 4;
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++)
printf("%d ", a[i][j]);
puts("");
}
return 0;
}