蛇形矩阵
题目链接:SSL 1971
题目大意
给出 n,要你输出一个 n*n 的蛇形矩阵。
类似这样的:
思路
就枚举
i
i
i,看它放在哪个位置。
那你就直接模拟放的位置移动的轨迹就好了。
具体可以康康代码。
代码
#include<cstdio>
using namespace std;
int n, a[101][101];
int nx, ny, dx, dy, tmp;
bool ck(int x, int y) {
if (x < 1 || x > n) return 0;
if (y < 1 || y > n) return 0;
return 1;
}
int main() {
// freopen("snake.in", "r", stdin);
// freopen("snake.out", "w", stdout);
scanf("%d", &n);
a[n][n] = 1;
if (n == 1) {
printf("1");
return 0;
}
a[n - 1][n] = 2;
nx = n - 1;
ny = n;
dx = 1;
dy = -1;
tmp = 2;
while (nx != 1 || ny != 1) {
tmp++;
if (ck(nx + dx, ny + dy)) {
nx += dx;
ny += dy;
a[nx][ny] = tmp;
}
else {
if (dx == 1 && dy == -1) {
if (ny == 1) nx--;
else ny--;
}
else {
if (nx == 1) ny--;
else nx--;
}
dx *= -1;
dy *= -1;
a[nx][ny] = tmp;
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++)
printf("%d ", a[i][j]);
printf("\n");
}
fclose(stdin);
fclose(stdout);
return 0;
}