POJ-1088 滑雪

Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子 

 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


一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-...-3-2-1更长。事实上,这是最长的一条。

思路:经典的滑雪问题,每个点去枚举一遍即可,枚举过程中用flat[]记录已经得到的值,dfs即可

 1 import java.io.BufferedReader;
 2 import java.io.IOException;
 3 import java.io.InputStreamReader;
 4 import java.util.Arrays;
 5 import java.util.Scanner;
 6 
 7 public class Main1088 {
 8     static int dir[][]= {{0,1},{0,-1},{1,0},{-1,0}};
 9     static int R,C,longsum,sum;
10     static int map[][];
11     static int flat[][];
12     public static void main(String args[]) throws IOException
13     {
14         BufferedReader sc=new BufferedReader(new InputStreamReader(System.in));
15         String s=sc.readLine();
16         String S[]=s.split(" ");
17         R=Integer.parseInt(S[0]);C=Integer.parseInt(S[1]);
18         map=new int[R][C];
19         flat=new int[R][C];
20         for(int i=0;i<R;i++)
21         {
22             String s1=sc.readLine();
23             String S1[]=s1.split(" ");
24             for(int j=0;j<C;j++)
25                 map[i][j]=Integer.parseInt(S1[j]);
26         }
27         for(int i=0;i<R;i++)
28             for(int j=0;j<C;j++)
29             {
30                 longsum=Math.max(longsum, dfs(i,j));
31                 
32             }
33         System.out.println(longsum);
34     }
35 public static int dfs(int x,int y)
36 {
37     if(flat[x][y]!=0)
38         return flat[x][y];
39     flat[x][y]=1;
40         for(int i=0;i<4;i++)
41         {
42             int dx=x+dir[i][0];
43             int dy=y+dir[i][1];
44             if(dx>=0&&dy>=0&&dx<R&&dy<C)
45                 if(map[dx][dy]<map[x][y])
46                 {
47                     flat[x][y]=Math.max(dfs(dx,dy)+1,flat[x][y]);
48                 }
49     }
50         return flat[x][y];
51     }
52 }
View Code

猜你喜欢

转载自www.cnblogs.com/gdskl/p/11445813.html