เราสามารถเริ่มจากองค์ประกอบแรกและเรียกซ้ำสำหรับทุกองค์ประกอบที่เข้าถึงได้จากองค์ประกอบแรก จำนวนการกระโดดน้อยที่สุดเพื่อไปถึงปลายจากองค์ประกอบแรกสามารถคำนวณได้จากจำนวนการกระโดดน้อยที่สุดที่ต้องการเพื่อไปถึงปลายจากองค์ประกอบที่เข้าถึงได้จากองค์ประกอบแรก
Array == {1, 3, 6, 3, 2, 3, 6, 8, 9, 5};
จำนวนขั้นตอนที่ต้องการคือ 4
ตัวอย่าง
using System;
namespace ConsoleApplication
{
public class Arrays
{
public int MinJumps(int[] arr, int l, int h)
{
if (h == l)
return 0;
if (arr[l] == 0)
return int.MaxValue;
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;
}
}
class Program
{
static void Main(string[] args)
{
Arrays a = new Arrays();
int[] arrm = { 1, 3, 6, 3, 2, 3, 6, 8, 9, 5 };
int n = arrm.Length;
Console.Write(" Minimum number of jumps to reach end is " + a.MinJumps(arrm, 0, n - 1));
}
}
}
ผลลัพธ์
4