AcWing 756. 蛇形矩阵

发布时间 2023-05-05 13:22:57作者: gao79138

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;
}