蓝桥杯:最长滑雪道
藍橋杯:最長滑雪道:
資源限制:
時間限制:1.0s
內存限制:256.0MB
問題描述:
小袁非常喜歡滑雪, 因為滑雪很刺激。為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。 小袁想知道在某個區域中最長的一個滑坡。區域由一個二維數組給出。數組的每個數字代表點的高度。如下:
一個人可以從某個點滑向上下左右相鄰四個點之一,當且僅當高度減小。在上面的例子中,一條可滑行的滑坡為24-17-16-1。當然25-24-23-…-3-2-1更長。事實上,這是最長的一條。
你的任務就是找到最長的一條滑坡,并且將滑坡的長度輸出。 滑坡的長度定義為經過點的個數,例如滑坡24-17-16-1的長度是4。
輸入格式:
輸入的第一行表示區域的行數R和列數C(1<=R, C<=10)。下面是R行,每行有C個整數,依次是每個點的高度h(0<= h <=10000)。
輸出格式:
只有一行,為一個整數,即最長區域的長度。
樣例輸入:
5 5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
樣例輸出:
25
代碼實現:
import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int R = in.nextInt();int C = in.nextInt();int[][] num = new int[R][C];//找到數組中的最低點min = Integer.MAX_VALUE;for(int i=0;i<num.length;i++) {for(int j=0;j<num[0].length;j++) {num[i][j] = in.nextInt();if(num[i][j]<min) {min = num[i][j];}}}for(int i=0;i<num.length;i++) {for(int j=0;j<num[0].length;j++) {dfs(num , i , j , 1);}}System.out.println(max);}static int min;static int max = 0;public static void dfs(int num[][] , int i , int j , int n) {if(n>max) {max = n;}if(num[i][j]==min) {return;}//左if(check(num , i , j ,i , j-1)) {dfs(num , i , j-1 , n+1);}//上if(check(num , i , j ,i-1 , j)) {dfs(num , i-1 , j , n+1);}//右if(check(num , i , j ,i , j+1)) {dfs(num , i , j+1 , n+1);}//下if(check(num , i , j ,i+1 , j)) {dfs(num , i+1 , j , n+1);}}public static boolean check(int[][] num , int i , int j , int a ,int b) {if(a<0 || b<0 || a>=num.length || b>=num[0].length) {return false;}if(num[a][b]>=num[i][j]) {return false;}return true;} }今天的學習到這里結束了。
這是之前寫的,今天算是總計一下。
鄙人水平有限,若有寫的不妥當打地方 還請大佬指正。
又看不懂的地方,留言給我。
最后最后。如果你看了有所收獲,可不可以點贊(你覺得還可),評論(還不錯給點支持),轉發(謝謝謝~~)
總結
- 上一篇: 转:移动互联:没有新故事没有新大佬
- 下一篇: 百度地图获取规划路径信息