$Time: O(n\*m), Space: O(n\*m)$
#include <bits/stdc++.h>
using namespace std;
const int N = 110;
int a[N][N], n, m;
//先向➡️走,y不变,x++,碰到墙向⬇️走,y++,x不变,其他同理
int dy[4] = {0, 1, 0, -1}, dx[4] = {1, 0, -1, 0};
int main() {
cin >> n >> m;
int y = 0, x = 0, d = 0;
for (int i = 1; i <= n*m; i++) {
a[y][x] = i;
int new_y = y+dy[d], new_x = x+dx[d]; // 一直走,碰到墙就换个方向
if (new_y < 0 || new_y >= n || new_x < 0 || new_x >= m || a[new_y][new_x])
d = (d+1)%4, new_y = y+dy[d], new_x = x+dx[d];
y = new_y, x = new_x; // 更新方向
}
for (int r = 0; r < n; r++) {
for (int c = 0; c < m; c++)
cout << a[r][c] << " ";
cout << endl;
}
}