java实现:
public class Demo {
/**
* 计算区域最长长度
*
* 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更长。事实上,这是最长的一条。
*
* 思路:1、先把各点的高度按照从小到大排序
* 2、再依次从最小的点遍历,看它周围【上下左右】有没有比它高的点
* 3、一旦有,就更新比它高的点的路径长度
* 注意:最后输出的是路径长度而不是最长路径的起始高度
* 由于开始时路径长度初始化为 0,所以最后的结果要 +1
* @param all 存储所有区域高度数据
* @return 区域最长长度
*/
public int getMaxDistance(int[][] all) {
int i = 0, j = 0, n = 0;
int ilen = all.length;
int jlen = all[0].length;
int len = jlen * jlen;
int maxDistance = 0;
int[][] dirlen = new int[ilen][jlen];
int[][] dir = { { 0, 1 }, { 1, 0 }, { 0, -1