AcWing 756. 蛇形矩阵
原题链接
简单
作者:
Backkom
,
2021-03-11 18:01:55
,
所有人可见
,
阅读 366
偏移量法
#include <iostream>
using namespace std;
const int N = 110;
int q[N][N];//平常喜欢用a当作数组名,但是定义了另一个叫a的整型变量,和数组名重名会报错
int main()
{
int n, m;
cin >> n >> m;
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
int x = 0, y = 0, d = 1;// d是direction 0,1,2,3代表上右下左四个方向
for (int i = 1; i <= n * m ; i ++)//一重循环递增值就可以,坐标由xy来确定
{
q[x][y] = i;
int a = x + dx[d], b = y + dy[d];
if (a < 0 || a >= n || b < 0 || b >= m || q[a][b])//注意是 q[a][b]
//判断*下一个位置*是否“撞墙”,两种情况:
// 1:数组越界 2:已经走过的不能再走,因为初始化为0了只有非0就代表走过了
{
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 << q[i][j] << ' ';
cout << endl;
}
return 0;
}