loading

算法随记_1 蛇形矩阵(偏移量法)

蛇形矩阵

title:(在线学习平台) link:(https://www.acwing.com/) cover:(https://cdn.acwing.com/media/activity/surface/log.png)
  • 输入两个整数nm,输出一个nm列的矩阵,将数字1n×m按照回字蛇形填充至矩阵中。具体矩阵形式可参考样例。
    image

  • 输入样例
    3 3

  • 输出样例

1 2 3
8 9 4
7 6 5
  • 思路
    image

数字碰到边界后按照 右、下、左、上 的方向循环排列。从上到左编号为d=0、1、2、3
更新方式:image

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n= sc.nextInt(),m= sc.nextInt();
        int[][] res=new int[n][m];//结果数组
        int[] dx={-1,0,1,0},dy={0,1,0,-1};//按照上、右、下、左(即d从0到3)的顺序,存储横纵坐标变化方式
        int x=0,y=0,d=1;//先向右走,d为方向右的编号:1
        for (int i=1;i<=n*m;i++){
            res[x][y]=i;
            int a=x+dx[d],b=y+dy[d];//下一次的坐标
            if(a<0||a==n||b<0||b>=m||res[a][b]>0){//判断坐标是否越界
                //坐标越界说明蛇形要转弯改变方向
                d=(d+1)%4;//变化规律
                a=x+dx[d];//更新坐标
                b=y+dy[d];
            }
            x=a;//更新坐标,即下次循环的res[x][y]
            y=b;
        }
        for(int i=0;i<n;i++){
            for (int j=0;j<m;j++){
                System.out.printf("%d ",res[i][j]);
            }
            System.out.println();
        }
    }
}

posted @ 2024-01-25 22:37  JiajiaMing  阅读(5)  评论(0编辑  收藏  举报