AcWing 756. 蛇形矩阵(含注释)
原题链接
简单
作者:
叶域
,
2024-10-19 11:04:08
,
所有人可见
,
阅读 1
#include <iostream>
using namespace std;
const int N = 110;
int f[N][N];
// 四个方向走
int nx[4] = {0, 1, 0, -1}, ny[4] = {1, 0, -1, 0};
int main()
{
int n, m;
cin >> n >> m;
//u 方向,(x, y) 走到的点
int u = 0, x = 1, y = 1;
for(int i = 1; i <= n * m; i++)
{
f[x][y] = i;
// 往下一个格子走
x += nx[u], y += ny[u];
// 如果下个格子超过边界或者走过了
if(x < 1 || y < 1 || x > n || y > m || f[x][y]!=0)
{
// 回退一步
x -= nx[u], y -= ny[u];
// 换个方向
u = (u + 1) % 4;
// 前进一步
x += nx[u], y += ny[u];
}
}
for(int i = 1; i <= n; i++, puts(""))
for(int j = 1; j <= m; j++)
cout << f[i][j] << " ";
return 0;
}