当前位置: 首页 > 知识库问答 >
问题:

使用分而治之找到青蛙穿越池塘跳跃次数最少的路径

葛飞扬
2023-03-14

一只青蛙正试图穿过池塘,但他只能在石头上跳跃,最多能跳五个单位。

我们得到了一个包含1和0(水为0,石头为1)的数组,任务是找到可能的最佳方法,以找到跳跃次数最少的路径(如果可能,使用分治)。

数组示例-

我刚刚开始学习算法,所以如果你们能帮我学习算法和代码就好了。

共有1个答案

朱兴运
2023-03-14

我对分而治之方法的想法如下:

program frog(array)
begin
  divide array after the '1' left of the center of the array;
  foreach (partialArray) do begin
    if (length(partialArray) > 5) then frog(partialArray);
  end foreach;
end.

让我们以给定的数组为例:[0 0 0 1 0 0 1 0 1 0 0 1 0 1 0 0 0 0 0 0 0]

  • 1st部门:[0 0 0 1 0 0 1 0 0 1 | 0 1 0 0 1 0 1 0 0 0 0 0]
  • 2nd部门:[0 0 0 1 | 0 0 1 | 0 1 0 0 1 | 0 1 0 0 0 0 0]
  • 3rd部门:[0 0 0 1 | 0 0 1 | 0 0 1 | 0 0 1 | 0 0 0 0 0 0]

在这种情况下,青蛙会跳到第一个、第二个、第三个、第五个和第七个1,然后才能达到目标(=6跳)。

为什么这个算法有效?让我们假设,它不会输出青蛙跳跃的最短路径。这意味着,我们没有找到青蛙跳跃最大的partialArrays。如果一个partialArray不会像一个最大的跳跃,那就意味着:在1之后,partialArray内部至少有一个1,青蛙仍然可以到达。这是不可能的,因为length(partialArray)≤ 5有效。因此,partialArray之后的每个1都会太远(

 类似资料:
  • 我处理下面提供的一个可编码性问题, 斐波那契序列使用以下递归公式定义: 一只小青蛙想去河的对岸。青蛙最初位于河的一边(位置−1),想要到达另一边(位置N)。青蛙可以跳过任何距离F(K),其中F(K)是第K个斐波那契数。幸运的是,河上有许多树叶,青蛙可以在树叶之间跳跃,但只能在N号位置的岸边方向跳跃。 河上的叶子用一个由N个整数组成的数组表示。数组A的连续元素表示从0到N的连续位置− 1在河上。阵列

  • 下面是寻找最小跳跃次数的算法谜题。发布了详细的问题声明和两个代码版本来解决这个问题。我做了测试,似乎两个版本都可以工作,我的第二个版本是版本一代码的优化版本,这使得我从开始,而不是持续增加,这可以通过不迭代所有的插槽来节省时间数组。 我的问题是,想知道我的第二个版本代码是否100%正确?如果有人发现任何逻辑问题,请指出。 问题陈述 给定一个非负整数数组,您最初位于数组的第一个索引处。 数组中的每个

  • 本文向大家介绍手写代码:青蛙跳台阶相关面试题,主要包含被问及手写代码:青蛙跳台阶时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 递归: 非递归:  

  • 问题:到达终点的最小跳跃次数 给定一个整数数组,其中每个元素表示可以从该元素向前执行的最大步数。编写一个函数返回到达数组末尾的最小跳转次数(从第一个元素开始)。如果一个元素是0,那么我们不能移动该元素。 例子: 输入:arr[]={1,3,5,8,9,2,6,7,6,8,9}输出:3(1- 来源:http://www.geeksforgeeks.org/minimum-number-of-jump

  • 我正在调试以下问题并发布代码。不知道代码是否正确。我目前的疑问是,是否应该一直增加(在这一行--

  • 穿越地心之旅 (如果你了解洋葱圈模型,略过本小节) 首先让我们对洋葱圈模型有一个直观的认识: 地球构造 物理学上,地球可划分为岩石圈、软流层、地幔、外核和内核5层。 化学上,地球被划分为地壳、上地幔、下地幔、外核和内核。地质学上对地球各层的划分 演示Koa的中间件之前,我们用函数来描述一场穿越地心之旅: <?php function crust($next) { echo "到达<地壳>\