思路:偏移量技巧,→↓←↑四方向循环
往右走(0,1)往下走(1, 0)往左走(0,-1)往上走(-1,0)
然后撞墙有两种情况:出界或者前面走过了
出界就是判断下一位置横纵坐标,走过就判断下一位置元素是否为0 ,拐弯可能要拐很多次,取余数
代码:
#include <bits/stdc++.h>
using namespace std;
int res[101][101];
int main() {
int n, m, d = 0, x = 0, y = 0;
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
cin >> n >> m ;
for (int i = 1 ; i <= m * n ; i++) {
res[x][y] = i;
int a = x + dx[d], b = y + dy[d];
if (a >= n || a < 0 || b >= m || b < 0 || res[a][b]) {
d = (d + 1) % 4;
a = x + dx[d] ;
b = y + dy[d];
}
x = a ;
y = b;
}
for (int i = 0 ; i < n ; i++) {
for (int j = 0 ; j < m ; j++)
cout << res[i][j] << ' ';
cout << endl;
}
return 0;
}