【蓝桥杯】【基础练习19】【回形取数】
来源:互联网 发布:2017网络手游排行榜 编辑:程序博客网 时间:2024/04/28 08:20
题目:回形取数
问题描述
回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转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表示这个位置已经取过。
源码:
public class Test011 {private static String s = "ULDR";private static int m;private static int n;private static int[][] a ;public static void main(String[] args) {Scanner sc = new Scanner(System.in);m = sc.nextInt();n = sc.nextInt();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('D', 0, 0, m*n);}//a表示矩阵数组,o表示当前的行进的方向,x代表横坐标,y代表纵坐标,step代表剩下几个位置没有走过private static void walk(char o, int x, int y,int step){if(step == 1){ //程序结束条件System.out.println(a[x][y]);return ;}switch (o) {case 'U':if(x-1<0 ||(x-1>=0 && a[x-1][y]==-1)){o = getNext(o);walk(o, x, y, step);}else{System.out.print(a[x][y]+" ");a[x][y] = -1;walk( o, x-1, y, step-1);}break;case 'L':if(y-1<0 ||(y-1>=0 && a[x][y-1]==-1)){o = getNext(o);walk(o, x, y, step);}else{System.out.print(a[x][y]+" ");a[x][y] = -1;walk( o, x, y-1, step-1);}break;case 'D':if(x+1 == m || (x+1<m && a[x+1][y]==-1)){o = getNext(o);walk(o, x, y, step);}else{System.out.print(a[x][y]+" ");a[x][y] = -1;walk(o, x+1, y, step-1);}break;case 'R':if(y+1 == n|| (y+1<n && a[x][y+1]==-1)){o = getNext(o);walk(o, x, y, step);}else{System.out.print(a[x][y]+" ");a[x][y] = -1;walk( o, x, y+1, step-1);}break;}}//取下一方向private static char getNext(char c){int index = s.indexOf(c);index++;if(index == s.length()){index = 0;}return s.charAt(index);}
0 0
- 【蓝桥杯】【基础练习19】【回形取数】
- 蓝桥杯:基础练习 回形取数
- 蓝桥杯基础练习 回形取数
- 蓝桥杯基础练习 回形取数
- 蓝桥杯基础练习 回形取数
- 蓝桥杯 BASIC-25 基础练习 回形取数
- 基础练习 回形取数
- 基础练习 回形取数
- 基础练习 回形取数
- 基础练习 回形取数
- 基础练习 回形取数 暴力
- 基础练习 回形取数
- 基础练习 回形取数
- 基础练习 回形取数
- 基础练习 回形取数
- 基础练习 回形取数
- 蓝桥杯习题(基础练习)
- 【蓝桥杯练习系统】基础练习 闰年判断
- 计算机图形学————绘制动态的行星系
- Spark-MLlib机器学习相关的数据类型
- Paint和Canvas
- 工作常用工具汇总
- linux自学笔记(2)
- 【蓝桥杯】【基础练习19】【回形取数】
- STL中为什么我们更偏爱vector而不是deque
- matlab中blas库的学习
- rsync同步工具的使用
- 浅拷贝和深拷贝详解
- I2C笔记
- jvm参数配置
- CodingNet - Learning - 1
- mac 10.11 下的sourceTree 和 git 总是需要输入密码的解决办法