滑雪算法(贪心算法)的java和c的实现

本文详细介绍了滑雪算法,并提供了使用Java和C语言的实现代码,通过实例展示了如何运用贪心策略解决实际问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值