【蓝桥杯】【回形取数】
生活随笔
收集整理的這篇文章主要介紹了
【蓝桥杯】【回形取数】
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
【題目】
問題描述
回形取數(shù)就是沿矩陣的邊取數(shù),若當(dāng)前方向上無數(shù)可取或已經(jīng)取過,則左轉(zhuǎn)90度。一開始位于矩陣左上角,方向向下。
輸入格式
輸入第一行是兩個不超過200的正整數(shù)m, n,表示矩陣的行和列。接下來m行每行n個整數(shù),表示這個矩陣。
輸出格式
輸出只有一行,共mn個數(shù),為輸入矩陣回形取數(shù)得到的結(jié)果。數(shù)之間用一個空格分隔,行末不要有多余的空格。
樣例輸入
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
?
【分析】
由于運(yùn)動有四個方向,我們只有確定當(dāng)前所處的方向的時候才能知道下一步往哪里走
ULDR 表示上右下左四個方向,它代表了左轉(zhuǎn)的次序,-1表示這個位置已經(jīng)取過。
?
?
【源碼】
?
private static String s = "ULDR";public static void main(String[] args) {//*****從控制臺讀取并存儲數(shù)據(jù)*****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);}//遞歸取數(shù)函數(shù)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;}//去取下一個數(shù)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;}//調(diào)整方向函數(shù),左轉(zhuǎn)90度private static char getNext(char d) {int index = s.indexOf(d);index++;if(index == s.length()) {index = 0;}return s.charAt(index);}?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的【蓝桥杯】【回形取数】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成 绩 统 计
- 下一篇: 《孵化皮克斯》读书第四天(完结)