zoukankan      html  css  js  c++  java
  • Java实现 蓝桥杯 算法提高 最长滑雪道

    试题 算法提高 最长滑雪道

    资源限制
    时间限制: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

    package com.company;
    
    import java.util.Scanner;
    
    public class 最长滑雪道 {
        //四个方向
        static int p[][] = { {1, 0}, {0, 1},{-1, 0}, {0, -1}};
        static int max = Integer.MIN_VALUE, r, c;
    
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            r = sc.nextInt();
            c = sc.nextInt();
            int[][] a = new int[r][c];
            for (int i = 0; i < r; i++) {
                for (int j = 0; j < c; j++) {
                    a[i][j] = sc.nextInt();
                }
            }
            for (int i = 0; i < r; i++)
            {
                for (int j = 0; j < c; j++)
                {
                    dfs(a, i, j, 1);
                }
            }
            System.out.println(max);
        }
    
        public static void dfs(int[][] a, int i, int j, int sum) {
            int t, x, y;
            if (sum > max)//找出可以走的路径中的最大值
                max = sum;
            for (t = 0; t < 4; t++)//向上下左右分别搜索
            {
                x = i + p[t][0];//在节点处向上和下移动
                y = j + p[t][1];//在节点处向左和右移动
                if (x >= 0 && x < r && y >= 0 && y < c && a[x][y] < a[i][j])//如果没有超出数组边界且这个节点比原来的小
                {
                    sum++;//我们的路的长度加一
                    dfs(a, x, y, sum);//在新节点重复此次循环,到达路径最小处结束循环
                    sum--;//回溯到可以走的节点时把走过的路的长度减去
                }
            }
    
        }
    }
    
    
  • 相关阅读:
    Xshell6配置ssh免密码登录虚拟机
    编程语言的各种区别
    unity_小功能实现(敌人追踪主角)
    unity_小功能实现(敌人巡逻功能)
    Unity Editor已停止工作
    unity之初级必备知识
    unity之中级工程师
    iTween基础之功能简介
    C#数据结构_查找
    C#数据结构_排序
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13076381.html
Copyright © 2011-2022 走看看