问题描述:

一只袋鼠要从河这边跳到河对岸,河很宽
但是河中间打了很多桩子,每隔一米就有一个,
每个桩子上都有一个弹簧,袋鼠跳到弹簧上就可以跳的更远。
每个弹簧力量不同,用一个数字代表它的力量,如果弹簧力量为5,
就代表袋鼠下一跳最多能够跳5米,如果为0,就会陷进去无法继续跳跃。
河流一共N米宽,袋鼠初始位置就在第一个弹簧上面,要跳到最后一个弹簧之后就算过河了,
给定每个弹簧的力量,求袋鼠最少需要多少跳能够到达对岸。如果无法到达输出-1
输入描述:
输入分两行,第一行是数组长度N (1 ≤ N ≤ 10000),第二行是每一项的值,用空格分隔。
输出描述:
输出最少的跳数,无法到达输出-1
输入:
5
2 0 1 1 1
输出:
4

思路介绍:

其实这个题也是一个回溯法的题,其实说白了就是回溯法适用于就是先走一步然后看下一步的,然后如果下一步可以走的通的话,就继续往下面走,如果走不通的话就退回来继续执行
对于本题而言,我可以先建立一个一维的数组array[ ]用来存放每个弹簧的弹力,
就随便举个例子把,输入的五个数是2、1、2、1、1

2 1 2 1 1

所以接下来我们就要开始从array下标为0开始用回溯法求解了,首先你看array[0]=2,说明他可以跳一个或者两格,所以接下来就要用先跳一格来尝试了,之后紧接着再跳一格,此时发现弹簧的弹力是2,所以可以跳一格或者是两格,先尝试跳一格的,此时i=3了,此时因为array[3]=1,所以只能跳一格,然后array[4]=1,之后就是在跳一格然后就结束了,我首先画一下这一种的大致情况发展

2 1 2 1 1
- - - -
2 1 2 1 1
- - - -
2 1 2 1 1
- - - -
2 1 2 1 1
- - - -
2 1 2 1 1
- - - -
2 1 2 1 1
- - - - -

这是第一种情况,之后的情况就不讨论了,用回溯法就可以解决了…

代码分析:

import java.util.Scanner;
public class Main {static int number;static String str="";public static void main(String[] args) {Scanner m=new Scanner(System.in);int n=m.nextInt();number=n;int array[]=new int[n];for(int i=0;i<array.length;i++)array[i]=m.nextInt();int temp=0;operate(0,array,temp);printf(str);}public static void printf(String str2) {if(str.equals(""))System.out.println(-1);else{String ss[]=str.split(" ");int nn[]=new int[ss.length];for(int i=0;i<ss.length;i++)nn[i]=Integer.parseInt(ss[i]);int min=nn[0];for(int k=0;k<nn.length;k++)if(min>nn[k])min=nn[k];System.out.println(min);}}public static void operate(int i, int[] array,int temp) {if(i>=number){System.out.println(temp);str+=temp+" ";return ;}else if(i<number){int ss=array[i];temp++;for(int k=0;k<=ss;k++){array[i]=k;if(panduan(array[i])){operate(array[i]+i,array,temp);}}}}public static boolean panduan(int i) {if(i==0)return false;elsereturn true;}
}

袋鼠跳河问题——回溯法解决相关推荐

  1. c语言 用回溯算法解决01背包问题,回溯法解决01背包问题

    <回溯法解决01背包问题>由会员分享,可在线阅读,更多相关<回溯法解决01背包问题(21页珍藏版)>请在人人文库网上搜索. 1.回溯法解决01背包问题,回溯法解决01背包问题, ...

  2. 回溯法解决全排列问题总结

    1.了解全排列和回溯 所谓全排列就是从n个元素中取出n个元素按照一定的顺序进行排列,所有的排列情况叫做全排列. 这n个元素又分为两种情况,一种是n个元素存在重复元素,一种是n个元素不存在重复元素.不存 ...

  3. 回溯算法背包问题迭代c语言,回溯法解决0_1背包问题(迭代和递归)

    问题:0/1背包问题 例子:weight数组代表物品重量,value数组代表物品价值,M代表背包容量.背包是按单位价值递减的顺序排列的,即value[i]/weight[i]>value[i-1 ...

  4. 利用回溯法解决1-9之间添加+或-或使得运算结果为100的问题

    问题描述 编写一个在1,2,-,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性.例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 1 ...

  5. 回溯法解决0-1背包问题

    回溯法解决0-1背包问题 参考文章: (1)回溯法解决0-1背包问题 (2)https://www.cnblogs.com/womendouyiyang/p/10957527.html (3)http ...

  6. 编程解决素数环问题Java_回溯法解决素数环问题java实现

    素数环问题: 输入正整数n,把整数1,2,3--,n组成一个环,使得相邻两个整数之和均为素数,输出所有方案,注意同一个环应恰好输出一次.n<==16 样例输入: 6 样例输出: 1 4 3 2  ...

  7. 回溯法解决部落冲突问题

    回溯法解决部落冲突问题 实验内容 问题描述 思路分析 方法步骤 实验代码 实验内容 原始部落byteland中的居民为了争抢有限的资源,经常发生冲突.几乎每个居民都有它的仇敌.部落酋长为了组织一支保卫 ...

  8. 回溯法解决n皇后问题

    回溯法解决n皇后问题 题目要求: 在n×n格的棋盘上放置彼此不受攻击的n个皇后.按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子.n后问题等价于在n×n格的棋盘上放置n个皇后, ...

  9. 回溯法解决力扣79题单词搜索

    回溯法解决力扣79题单词搜索 给定一个 m x n 二维字符网格 board 和一个字符串单词 word .如果 word 存在于网格中,返回 true :否则,返回 false . 单词必须按照字母 ...

最新文章

  1. 深入探讨下Linux下修改hostname的五个问题(四)
  2. 漫谈面向对象基石之开闭原则(OCP)(转)
  3. labview数据枚举数据服务器,枚举器报告'未指定的错误,不能枚举服务器
  4. 人体工学腰垫,保腰神器,改善久坐腰酸背痛
  5. ListView常用属性、方法
  6. 牛客网暑期ACM多校训练营(第十场)D Rikka with Prefix Sum (组合数学)
  7. 小试牛刀:文本处理工具之grep、egrep详解
  8. (转)基于Metronic的Bootstrap开发框架经验总结(2)--列表分页处理和插件JSTree的使用...
  9. android studio怎么设置log保存txt_【Stata写论文】log命令的使用和分析结果导出
  10. 产品经理的方向感-产品生命周期
  11. Java窗口之文本框、按钮、菜单
  12. 论文排版一步搞定之公式——(公式居中,编号居右)
  13. HBase 过滤器使用
  14. 自学三个月编写简单走迷宫游戏
  15. error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCR...
  16. PHP windoews调用OpenOffice实现word/ppt转PDF-附带demo
  17. SQLserver技巧 年份判断,以及向上想下取整
  18. 2.JVM垃圾回收机制-什么时候回收内存
  19. 网页图片加载优化方法总结
  20. 格式化什么意思?格式化了数据还能恢复吗?

热门文章

  1. JVM和数据库调优方案
  2. window 安装并运行Nacos
  3. vue+elementUI实现前端分页
  4. Android通讯录管理(获取联系人 通话记录 短信消息)(一)
  5. 什么是股票期权?股票期权激励是什么?
  6. 小程序仿微信支付键盘实现
  7. CTEX里的函数、符号及特殊字符
  8. mybatis plus 实体类多加个属性
  9. 荣耀升级android版本最好用,荣耀20PRO:升级MagicUI3.1后,凭什么感觉还能再战一年?...
  10. Win10 环境 VirtualBox 虚拟机与宿主机创建局域网