【蓝桥杯】【回形取数】
【题目】
问题描述
回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转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);}
【蓝桥杯】【回形取数】相关推荐
- [蓝桥杯]回形取数-方向向量+模拟
题目描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m行每 ...
- C++蓝桥杯 基础练习之回形取数
C++ 蓝桥杯题目讲解汇总(持续更新) VIP试题 回形取数 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度 ...
- python【蓝桥杯vip练习题库】BASIC-25 回形取数
试题 基础练习 回形取数 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. ...
- 蓝桥杯 java基础练习 回形取数
问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m ...
- 蓝桥杯 基础练习 回形取数
问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m ...
- [Java] 蓝桥杯BASIC-25 基础练习 回形取数
问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m ...
- 蓝桥杯 BASIC-25 基础练习 回形取数
问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m ...
- 蓝桥杯练习——回形取数
题目描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m行 ...
- 蓝桥杯-K好数(详解易懂)java
蓝桥杯-K好数java 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数 ...
最新文章
- Linux中环境变量与文件查找
- 【SSH网上商城项目实战16】Hibernate的二级缓存处理首页的热门显示
- 070_获取日期方法
- Mato的文件管理 (莫队)题解
- oracle trace跟踪,浅析Oracle追踪工具SQL Trace的启用方式
- pytorch学习率衰减
- windows 下 opencv 3.x 的安装及常见问题的解决
- TFRecord —— tensorflow 下的统一数据存储格式
- oracle vm 加大存储,Oracle VM VirtualBox下ubuntu虚拟机存储空间不够解决方案
- SpringBoot项目的测试类
- 心电图前波过多_如何读懂心电图危急值?
- 手机app系统软件开发报价单及方案:费用明细
- 【一起学SQLite】--Delphi下的SQLite之简介(3)
- matlab 课程设计心得与总结,(最新整理)课程设计心得体会
- 服务器带的虚拟软驱有什么用,云服务器是干什么用的?摩杜云带你去了解!
- 华硕路由器ddns设置_华硕RT-AC86U路由器怎样设置DDNS 开启DDNS操作方法步骤
- 汉语拼音音节的歧义指数
- 大数据工程师入职京东年薪37w(附:面试真题分享)
- 【自动控制原理_B站网课笔记】开环系统Nyquist曲线绘制
- JavaScript ES6 特性