蛇形矩阵java解法

输入两个正整数表示矩阵的行列数,输出蛇形矩阵。

在这里插入图片描述
该题思路是采用坐标输出数字,通过改变坐标来输出下一个数字。假设(0,0)为第一个数字的坐标,
那么第一行的数字x不变y依次加一,记→x:0,y:+1;然后撞墙改变方向,记↓x:+1,y:0;然后再次向左改变方向,记←x:0,y:-1;然后再次向上改变方向,记x:-1,y:0;把四个方向一次用0,1,2,3表示。

import java.util.Scanner;

public class test2 {
    public static void main(String[] args) {
        final int N=110;
        boolean[][] st=new boolean[N][N];//表示是否已经存在数字
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();//输入两个数字
        int[][] arr = new int[N][N];//初始化一个数组

        int[] dx={0,1,0,-1};//x的改变量
        int[] dy={1,0,-1,0};//y的改变量
        int x=0,y=0,d=0;
        for(int i=1;i<=(n*m);i++){
            int nx=x+dx[d],ny=y+dy[d];//初始化坐标(0,0)
            if(nx<0||nx>=n||ny<0||ny>=m||st[nx][ny]){//判断是否撞墙和改位置是否已经存在数字
                d=(d+1)%4;//四种方向的选择
                nx=x+dx[d];
                ny=y+dy[d];//移动之后的坐标
            }
            arr[x][y]=i;
            st[x][y]=true;//标记改位置已被占用
            x=nx;
            y=ny;//移动后的坐标值,赋给x和y
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                System.out.print(arr[i][j]+" ");//打印排好序的数组
            }
            System.out.println();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值