蛇形矩阵
蛇形矩阵
题目来之acwing
题目(点击跳转)
输入两个整数 n 和 m,输出一个 n 行 m 列的矩阵,将数字1到 n×m 按照回字蛇形填充至矩阵中。
具体矩阵形式可参考样例。
输入格式
输入共一行,包含两个整数 n 和 m。
输出格式
输出满足要求的矩阵。
矩阵占 n 行,每行包含 m 个空格隔开的整数。
数据范围
1≤n,m≤100
输入样例:
1 | 3 3 |
输出样例:
1 | 1 2 3 |
思路:
这个题目是一个模拟填数的题目,将数字从1开始依次按照回字规则填入n*m的矩阵中,解题的思路是模拟数字的方向,当一个方向走不通时按照顺时针旋转一下方向,这样就可以接着走了,填完之后将数组打印即可。
这边使用一个偏移量来控制方向(x轴的正方向是向下,y轴的正方形是向右)
- 最开始肯定是从(0,0)开始y轴正方向走的,这时偏移量为
(0,1) - 当向右走出界或者碰到已经填过的位置时,这时需要顺时针旋转方向,也就是向下即x轴的正方向走,这时偏移量为
(1,0) - 当向下走出界或者碰到已经填过的位置时,这时需要顺时针旋转方向,也就是向左即y轴的负方向走,这时偏移量为
(0,-1) - 当向左走出界或者碰到已经填过的位置时,这时需要顺时针旋转方向,也就是向上即x轴的负方向走,这时偏移量为
(-1,0) - 当向上走出界或者碰到已经填过的位置时,这时需要顺时针旋转方向,也就是向右即y轴的正方向走,这是偏移量为
(0,1)
可以发现,当方向旋转四次后,就会有一次循环,这是可以定义两个数组维护这个偏移量,即dx和dy。
代码:
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 欢迎来到后花园!