AcWing蛇形矩阵

问题描述

在这里插入图片描述
问题链接:https://www.acwing.com/problem/content/758/

分析

  • 如果要输入的话需要考虑当前数字的四个方向:上下左右。我们可以用两个一维数组dxdy将当前数字上下左右的位置相对于当前数字的偏移量保存下来。
  • 并用0,1,2,3分别表示上右下左四个方向(顺时针),用变量d来保存
  • 用(x,y)表示当前位置,(a,b)表示下一步要走的位置,我们需要判断是否需要改变方向,这里又分两种情况:出界和之前已经走过该位置如果需要改变方向的话我们需要更新d的值:d=(d+1)%4,然后将新的a和b的值赋值给x和y(a=x+dx[d],b=y+dy[d]

结合图来理解一下

  • dx相对原始位置上右下左x方向的偏移量
  • dy相对原始位置上右下左y方向的偏移量
  • d相对原始位置上右下左的方向

在这里插入图片描述

AC代码

import java.util.*;
public class Main{
    public static void main(String[] args)
    {
       int[][] arr=new int[110][110];
       Scanner scan=new Scanner(System.in);
       int n=scan.nextInt();
       int m=scan.nextInt();
       int[] dx={-1,0,1,0};
       int[] dy={0,1,0,-1};
       int x=0,y=0,d=1,a=0,b=0;
       for(int i=1;i<=n*m;i++)
       {
           arr[x][y]=i;
           a=x+dx[d];
           b=y+dy[d];
           if(a<0||a>=n||b<0||b>=m||arr[a][b]!=0)
           {
               d=(d+1)%4;
               a=x+dx[d];
               b=y+dy[d];
           }
           x=a;
           y=b;
       }
       for(int i=0;i<n;i++)
       {
           for(int j=0;j<m;j++)
           {
               System.out.print(arr[i][j]+" ");
           }
           System.out.println();
       }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值