Рубрики

Программа C # для минимального количества прыжков, чтобы достичь конца

Дан массив целых чисел, где каждый элемент представляет максимальное количество шагов, которые можно сделать вперед из этого элемента. Напишите функцию, которая будет возвращать минимальное количество прыжков для достижения конца массива (начиная с первого элемента). Если элемент равен 0, то не может пройти через этот элемент.

Пример:

Input: arr[] = {1, 3, 5, 8, 9, 2, 6, 7, 6, 8, 9}
Output: 3 (1-> 3 -> 8 ->9)

Первый элемент равен 1, поэтому можно перейти только к 3. Второй элемент равен 3, поэтому можно сделать не более 3 шагов, например, до 5, 8 или 9.

// C # программа для поиска минимума
// количество прыжков до конца

using System;

  

class GFG {

    // Возвращает минимальное количество

    // прыгает, чтобы достичь arr [h] от arr [l]

    static int minJumps(int[] arr, int l, int h)

    {

        // Базовый случай: когда источник

        // и пункт назначения одинаков

        if (h == l)

            return 0;

  

        // Когда ничего не достижимо

        // из данного источника

        if (arr[l] == 0)

            return int.MaxValue;

  

        // Обход всех точек

        // достижимо из arr [l]. Рекурсивный

        // получаем минимальное количество прыжков

        // необходимо достичь arr [h] из этих

        // достижимые точки.

        int min = int.MaxValue;

        for (int i = l + 1; i <= h && i <= l + arr[l]; i++) {

            int jumps = minJumps(arr, i, h);

            if (jumps != int.MaxValue && jumps + 1 < min)

                min = jumps + 1;

        }

        return min;

    }

  

    // Код драйвера

    public static void Main()

    {

        int[] arr = { 1, 3, 6, 3, 2, 3, 6, 8, 9, 5 };

        int n = arr.Length;

        Console.Write("Minimum number of jumps to reach end is "

                      + minJumps(arr, 0, n - 1));

    }

}

  
// Этот код предоставлен Sam007

Выход:

Minimum number of jumps to reach end is 4

Метод 2 (динамическое программирование)
В этом методе мы строим массив jumps [] слева направо так, что jumps [i] указывает минимальное количество переходов, необходимое для достижения arr [i] из arr [0]. Наконец, мы возвращаем прыжки [n-1].

C #

// Код C # для минимального количества прыжков для достижения конца

using System;

  

class GFG {

    static int minJumps(int[] arr, int n)

    {

        // прыжки [n-1] будут содержать

        // результат

        int[] jumps = new int[n];

  

        // если первый элемент равен 0,

        if (n == 0 || arr[0] == 0)

  

            // конец не может быть достигнут

            return int.MaxValue;

  

        jumps[0] = 0;

  

        // Находим минимальное количество

        // прыгает, чтобы достичь arr [i]

        // из arr [0] и присваиваем

        // это значение для jumps [i]

        for (int i = 1; i < n; i++) {

            jumps[i] = int.MaxValue;

            for (int j = 0; j < i; j++) {

                if (i <= j + arr[j] && jumps[j] != int.MaxValue) {

                    jumps[i] = Math.Min(jumps[i], jumps[j] + 1);

                    break;

                }

            }

        }

        return jumps[n - 1];

    }

  

    // Драйвер программы

    public static void Main()

    {

        int[] arr = { 1, 3, 6, 1, 0, 9 };

        Console.Write("Minimum number of jumps to reach end is : " 

                                      + minJumps(arr, arr.Length));

    }

}

  
// Этот код предоставлен Sam007

Выход:

Minimum number of jumps to reach end is : 3

Пожалуйста, обратитесь к полной статье на Минимальное количество прыжков, чтобы достичь конца для более подробной информации!

Рекомендуемые посты:

Программа C # для минимального количества прыжков, чтобы достичь конца

0.00 (0%) 0 votes