题目

问题描述
  回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。
输入格式
  输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。
输出格式
  输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。
样例输入
3 3
1 2 3
4 5 6
7 8 9
样例输出
1 4 7 8 9 6 3 2 5
样例输入
3 2
1 2
3 4
5 6
样例输出
1 3 5 6 4 2

分析

由于运动有四个方向,我们只有确定当前所处的方向的时候才能知道下一步往哪里走
ULDR 表示上右下左四个方向,它代表了左转的次序,-1表示这个位置已经取过。

源码

 private static String s = "ULDR";public static void main(String[] args) {//*****从控制台读取并存储数据*****Scanner sc = new Scanner(System.in);int m = sc.nextInt();int n = sc.nextInt();int[][] a = new int[m][n];for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {a[i][j] = sc.nextInt();}}sc.close();//************************walk(a,m, n, 0, 0, 'D', 0);}//递归取数函数private static void walk(int[][] a, int m, int n, int i, int j, char d, int step) {printN(a, i, j);//递归出口if(step == m*n) {return;}//确定方向while (true) {switch (d) {case 'U':if(i-1<0 || a[i-1][j]==-1) {d = getNext(d);continue;}break;case 'L':if(j-1<0 || a[i][j-1]==-1) {d = getNext(d);continue;}break;case 'D':if(i+1>=m || a[i+1][j]==-1) {d = getNext(d);continue;}break;case 'R':if(j+1>=n || a[i][j+1] == -1) {d=getNext(d);continue;}break;}break;}//去取下一个数switch (d) {case 'U':walk(a, m, n, i-1, j, d, step+1);break;case 'L':walk(a, m, n, i, j-1, d, step+1);break;case 'D':walk(a, m, n, i+1, j, d, step+1);break;case 'R':walk(a, m, n, i, j+1, d, step+1);break;}}private static void printN(int[][] a, int i ,int  j) {System.out.print(" " + a[i][j]);a[i][j] = -1;}//调整方向函数,左转90度private static char getNext(char d) {int index = s.indexOf(d);index++;if(index == s.length()) {index = 0;}return s.charAt(index);}

【蓝桥杯】【回形取数】相关推荐

  1. [蓝桥杯]回形取数-方向向量+模拟

    题目描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m行每 ...

  2. C++蓝桥杯 基础练习之回形取数

    C++ 蓝桥杯题目讲解汇总(持续更新) VIP试题 回形取数 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度 ...

  3. python【蓝桥杯vip练习题库】BASIC-25 回形取数

    试题 基础练习 回形取数 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. ...

  4. 蓝桥杯 java基础练习 回形取数

    问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m ...

  5. 蓝桥杯 基础练习 回形取数

    问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m ...

  6. [Java] 蓝桥杯BASIC-25 基础练习 回形取数

    问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m ...

  7. 蓝桥杯 BASIC-25 基础练习 回形取数

    问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m ...

  8. 蓝桥杯练习——回形取数

    题目描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入 输入第一行是两个不超过200的正整数m,  n,表示矩阵的行和列.接下来m行 ...

  9. 蓝桥杯-K好数(详解易懂)java

    蓝桥杯-K好数java 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数 ...

最新文章

  1. Linux中环境变量与文件查找
  2. 【SSH网上商城项目实战16】Hibernate的二级缓存处理首页的热门显示
  3. 070_获取日期方法
  4. Mato的文件管理 (莫队)题解
  5. oracle trace跟踪,浅析Oracle追踪工具SQL Trace的启用方式
  6. pytorch学习率衰减
  7. windows 下 opencv 3.x 的安装及常见问题的解决
  8. TFRecord —— tensorflow 下的统一数据存储格式
  9. oracle vm 加大存储,Oracle VM VirtualBox下ubuntu虚拟机存储空间不够解决方案
  10. SpringBoot项目的测试类
  11. 心电图前波过多_如何读懂心电图危急值?
  12. 手机app系统软件开发报价单及方案:费用明细
  13. 【一起学SQLite】--Delphi下的SQLite之简介(3)
  14. matlab 课程设计心得与总结,(最新整理)课程设计心得体会
  15. 服务器带的虚拟软驱有什么用,云服务器是干什么用的?摩杜云带你去了解!
  16. 华硕路由器ddns设置_华硕RT-AC86U路由器怎样设置DDNS 开启DDNS操作方法步骤
  17. 汉语拼音音节的歧义指数
  18. 大数据工程师入职京东年薪37w(附:面试真题分享)
  19. 【自动控制原理_B站网课笔记】开环系统Nyquist曲线绘制
  20. JavaScript ES6 特性

热门文章

  1. 拒绝无效练习~分享一些速写有效临摹小方法~
  2. SpringBoot集成uid-generator
  3. 什么是堆、栈以及区别
  4. 智过网:一级建造师证书可以同时注册的证书!
  5. vue身份证正则校验的2种类型
  6. (1)eop烧写和uboot烧写
  7. 从SASI到SAS:SCSI走过25年
  8. MQL5源码:智能交易脚本EA结构解读
  9. Java死锁Demo
  10. [到处走走]北京胜利饭店