AcWing 756. 蛇形矩阵
1. 地址
https://www.acwing.com/problem/content/description/758/
2. 题解
#include <iostream>
#include <cstdio>
using namespace std;
//通过四个方向(上右下左)的偏移量来控制打印
int main(){
int n,m;
int matrix[120][120];
int count = 1;
//x y 偏移量 分别代表:上右下左
//下标0 1 2 3 代表 上右下左
//蛇形矩阵打印方向:右 -> 下 -> 左 -> 上
int x[4] = {-1,0,1,0};
int y[4] = {0,1,0,-1};
//代表当前所在坐标
int tx,ty;
tx = 0;
ty = 0;
//代表当前方向(默认为右)
int direction = 1;
scanf("%d %d",&n,&m);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
//先走一步
int dx = tx + x[direction];
int dy = ty + y[direction];
//如果到边界-> 调转方向
//如果下一个位置已经有数了,那么也调转方向
if(dx < 0 || dx >= n || dy < 0 || dy >= m || matrix[dx][dy]){
direction = (direction + 1) % 4 ;
}
matrix[tx][ty] = count++;
tx += x[direction];
ty += y[direction];
}
}
//输出
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
printf("%d ",matrix[i][j]);
}
printf("\n");
}
return 0;
}