BASIC-25 回形取数 java
蓝桥杯基础练习:回形取数
问题描述
回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转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
//回形取数 import java.util.Scanner; public class Test1 { static int m,n; public static void main(String[] args) { Scanner s = new Scanner(System.in); m = s.nextInt(); n=s.nextInt(); int[][] a = new int[m][n]; boolean[][] b = new boolean[m][n]; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ a[i][j] = s.nextInt(); } } getNumber(a,b); s.close(); } static void getNumber(int[][] a,boolean[][] b){ int s =0; int i=0; int j=0; while(s<m*n){ //由上到下 while(i<m&&!b[i][j]){ System.out.print(a[i][j]+" "); b[i++][j]=true;//访问过的设置为true s++; } i--;// 超出范围,回退一层 j++;// 向右挪一格 //由左到右 while(j<n&&!b[i][j]){ System.out.print(a[i][j]+" "); b[i][j++]=true; s++; } j--; i--; //由下到上 while(i>=0&&!b[i][j]){ System.out.print(a[i][j]+" "); b[i--][j]=true; s++; } i++; j--; //由右到左 while(j>=0&&!b[i][j]){ System.out.print(a[i][j]+" "); b[i][j--]=true; s++; } j++; i++; } } }
额, 代码运行超时了。