【算法设计】实验四回溯算法(附源代码)

这里写目录标题

  • 一、上机目的
  • 二、上机内容与要求
  • 三、上机步骤
  • 四、上机结果
    • 1、将课本5.2节算法改为程序,并输入数据及进行测试;
    • 2、自学5.4节,并完成符号三角形问题。

一、上机目的

1、通过回溯法的示例程序理解回溯法的基本思想;
2、运用回溯法解决实际问题进一步加深对回溯法的理解和运用;

二、上机内容与要求

1、分析并掌握“装载问题” 的回溯法求解方法;
2、练习使用回溯法求解“符号三角形问题”

三、上机步骤

1.理解回溯算法思想和算法示例;
2.上机输入和调试算法示例程序;
3.理解实验题的问题要求;
4.上机输入和调试自己所编的实验题程序;
5.验证并分析实验题的实验结果;
6.整理出实验报告;

四、上机结果

1、将课本5.2节算法改为程序,并输入数据及进行测试;

import java.util.Scanner;
public class MaxLoading {static final int NUM = 100;// 集装箱重量static int[] w=new int[NUM];// 最优解static int[] bestX = new int[NUM];// 当前解static int[] x= new int[NUM];// 最优装船重量static int bestW = 0;// 物品个数static int n;// 第一个船的载重量static int c1;// 第二个船的载重量static int c2;// 当前已装船重量static int cw = 0;private static int bound(int t) {// 初始化剩余重量int rw = 0;for (int i = t+1;i <= n;++i) {// 计算剩余集装箱重量rw += w[i];}// 返回可装的总重量return rw+cw;}/*** 回溯法* @param t :第几个集装箱*/public static void loadingRec(int t) {if (t > n) { // 集装箱装箱完毕if (cw > bestW) {  // 如果当前重量大于最优重量// 更新最优重量bestW = cw;for (int i = 1; i <= n; i++) {// 最优解更新为当前解bestX[i] = x[i];}}return;}else { // 尚未结束装箱if (cw + w[t] <= c1) { // 若装入当前集装箱,且重量小于船载重量// 加上此集装箱重量cw +=w[t];// 选择该集装箱x[t] = 1;// 下一个loadingRec(t+1);cw -= w[t];x[t] = 0;}if (bound(t) > bestW) { // 不装第t个集装箱,若总重量大于最优重量loadingRec(t+1);}}}public static void main(String[] args) {Scanner in = new Scanner(System.in);System.out.print("请输入集装箱的个数:");n = in.nextInt();System.out.println("请输入集装箱的重量(整数):");for (int i = 1; i <= n;++i) {w[i] = in.nextInt();}in.nextLine();System.out.print("请输入第一船的载重量:");c1 = in.nextInt();in.nextLine();System.out.print("请输入第二船的载重量:");c2 = in.nextInt();loadingRec(1);System.out.println("第一船的最优重量为:" + bestW);System.out.println("第一船的最优解为:");for (int i = 1; i <= n;++i) {if (bestX[i] == 1) { // bestX[i] == 1,表示选中System.out.println("物品" + i + "装入第1个集装箱");}}int cw2 = 0;for (int i = 1;i <= n;++i) {// 计算剩余重量if (bestX[i] == 0) {cw2 += w[i];}}// 剩余重量小于第二个船的载重量,可以装入// 下行为小于第二艘船的载重量if (cw2 <= c2) {System.out.println("可以将剩余集装箱装入第二船,问题有解");}else { // 剩余重量大于第二个船的重量,不能装入System.out.println("不能将剩余集装箱装入第二船,问题无解");}in.close();}
}

在这里插入图片描述
在这里插入图片描述

2、自学5.4节,并完成符号三角形问题。

import java.util.Scanner;/*** 符号三角形问题* @author Jaick**/
public class Triangles {public int n;//第一行的符号个数public int half;//n*(n+1)/4public int count;//当前+的个数public int[][] p;//符号三角形矩阵public long sum;//已找到的符号三角形个数public long compute(int nn){n=nn;count=0;sum=0;half=n*(n+1)/2;if(half%2==1) return 0;half=half/2;p=new int[n+1][n+1];backtrack(1);return sum;}public void backtrack(int t){if(count>half||(t*(t-1)/2-count)>half)return ;if(t>n)sum++;else{for(int i=0;i<2;i++){p[1][t]=i;count+=i;for(int j=2;j<=t;j++){p[j][t-j+1]=p[j-1][t-j+1]^p[j-1][t-j+2];//^:按位异或。比如二进制     1001 ^ 1100 = 0101  0^0=0,1^1=0 ,1^0 = 1,0^1=1。count+=p[j][t-j+1];}backtrack(t+1);for(int j=2;j<=t;j++){count-=p[j][t-j+1];}count-=i;}}}public static void main(String[] args) {Scanner in =new Scanner(System.in);Triangles t=new Triangles();System.out.println("Input:");int n=in.nextInt();long sum=t.compute(n);System.out.println("Output:");System.out.println("n="+t.n+"时,有"+sum+"个符号三角形");}
}

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/274944.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言--从零开始的扫雷游戏

C语言--从零开始的扫雷游戏 1. 游戏说明2. 总体代码3. 详细讲解3.1 菜单部分3.2 游戏主体部分3.2.1 总体分析3.2.2 棋盘初始化3.2.3 棋盘展示3.2.4 设置地雷3.2.5 扫雷阶段3.2.6 统计雷个数的代码3.2.7 使用迭代的方式进行展开&#xff1a;3.2.8 扫雷部分主体代码 4. 总结 1. 游…

图片格式转换怎么操作?这一个方法快快收藏

图片格式转换能够改变图片的质量、大小兼容性。不同的图片格式用途也不同&#xff0c;当我们需要转换图片格式的时候要怎么操作呢&#xff1f;下面&#xff0c;小编给大家分享一款操作简单&#xff0c;小白也能轻松上手的图片转换器&#xff08;https://www.yasuotu.com/geshi&…

DDD领域模型驱动

传统MVC架构 DDD架构: api层:api请求方式,透传【传递参数】,几个业务对应api 业务层:做编排,业务里要有哪些服务,执行顺序是什么,以及怎么做 领域层:负责领域内调用,然后领域怎么划分 Dao层:数据库操作【或者另外一个应用 数据源之类的】 遵守原则: ①允许跨层…

什么是架构?架构设计原则是哪些?什么是设计模式?设计模式有哪些?

什么是架构?架构设计原则是哪些?什么是设计模式?设计模式有哪些? 架构的本质 架构本身是一种抽象的、来自建筑学的体系结构,其在企业及IT系统中被广泛应用。 架构的本质是对事物复杂性的管理,是对一个企业、一个公司、一个系统复杂的内部关系进行结构化、体系化的抽象,…

php apache 后台超时设置

最近在写一个thinkphp项目的时候&#xff0c;发现Ajax从后端请求数据时间比较长&#xff0c;大概需要45秒左右&#xff0c;但是一旦请求时间超过40s&#xff0c;页面就会超时500了&#xff0c;一开始以为是ajax请求时间不能太长&#xff0c;后来将Ajax请求改为同步且timeout设置…

iTOP-3A5000开发板ATX规范设计外加机箱就是一台电脑主机

性能强 采用全国产龙芯3A5000处理器&#xff0c;基于龙芯自主指令系统 (LoongArch)的LA464微结构&#xff0c;并进一步提升频率&#xff0c;降低功耗&#xff0c;优化性能。 桥片 采用龙芯 7A2000&#xff0c;支持PCIE 3.0、USB 3.0和 SATA 3.0.显示接口2 路、HDMI 和1路 VGA&…

DARTS: DIFFERENTIABLE ARCHITECTURE SEARCH

DARTS&#xff1a;可微架构搜索 论文链接&#xff1a;https://arxiv.org/abs/1806.09055 项目链接&#xff1a;https://github.com/quark0/darts ABSTRACT 本文通过以可微分的方式表述任务&#xff0c;解决了架构搜索的可扩展性挑战。与在离散和不可微搜索空间上应用进化或强…

VR文化旅游虚拟现实介绍|虚拟现实元宇宙|VR设备购买

虚拟现实&#xff08;VR&#xff09;技术正在改变我们对文化旅游的认知和体验。通过VR技术&#xff0c;人们可以身临其境地探索世界各地的文化遗产和旅游景点&#xff0c;无需亲临现场也能感受到逼真的体验。以下是VR文化旅游虚拟现实的介绍&#xff1a; 身临其境的体验&#x…

web项目抢购模块测试

web项目抢购模块测试 抢购模块(先测后台,再测前台)流程抢购用例编写测试点--后台抢购用例编写测试点--前台用例设计 面试题1: 当你发现研发实现的结果与需求不一致时怎么办? 需求评审的时候:需要确认所有输入类型的校验是针对单独的输入框做的还是在最终提交时校验 抢购模块 需…

springboot266基于Web的农产品直卖平台的设计与实现

农产品直卖平台的设计与实现 摘 要 计算机网络发展到现在已经好几十年了&#xff0c;在理论上面已经有了很丰富的基础&#xff0c;并且在现实生活中也到处都在使用&#xff0c;可以说&#xff0c;经过几十年的发展&#xff0c;互联网技术已经把地域信息的隔阂给消除了&#x…

保研复习数据结构记(4)--树(二叉树、线索树、哈夫曼树,并查集)

一.树的基本术语 1.树 什么是空树&#xff1f;结点数为0的树非空树的特性&#xff1f;有且仅有一个根结点&#xff0c;没有后继的结点称为“叶子结点”&#xff0c;有后继的结点称为“分支结点”&#xff0c;除了根结点外任何一个结点都有且仅有一个前驱&#xff0c;每个结点…

Linux 基本命令

文章目录 1.echo2.cd3.find4.mkdir5.cp6.rm7.wc8.tar9.tail10.vim11.grep12.sed13 touch14 ls15 快捷键16 ln17 mv18 useradd19 usermod20 su 每天一个Linux命令 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 1.echo 中文 (Chinese): “回声” 或 “输…

(开源项目)OpenHarmony、社区共建Sample合入要求

1.新增Sample功能不能重复于当前已有Sample的功能&#xff1b; 2.新增Sample的工程推荐使用ArkTS语言编写&#xff1b; 3.新增Sample的工程推荐使用Stage模型编写&#xff1b; 4.新增Sample的工程中需要包含UI自动化用例&#xff08;ohosTest工程模块&#xff09;&#xff0…

使用腾讯云快速搭建WordPress网站流程详解

专栏系列文章&#xff1a; WordPress建站主题美化系列教程https://blog.csdn.net/seeker1994/category_12184577.html 一文搞懂WordPress是什么&#xff1f;为什么用它建站&#xff1f;怎么安装与部署&#xff1f; 初次安装WordPress后如何进行网站设置&#xff08;主题安装、…

String 底层是如何实现的?

1、典型回答 String 底层是基于数组实现的&#xff0c;并且数组使用了 final 修饰&#xff0c;不同版本中的数组类型也是不同的&#xff1a; JDK9 之前&#xff08;不含JDK9&#xff09; String 类是使用 char[ ]&#xff08;字符数组&#xff09;实现的但 JDK9 之后&#xf…

浅淡 C++ 与 C++ 入门

我们知道&#xff0c;C语言是结构化和模块化的语言&#xff0c;适用于较小规模的程序。而当解决复杂问题&#xff0c;需要高度抽象和建模时&#xff0c;C语言则不合适&#xff0c;而C正是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加了许多有用的库…

铠侠SSD新型接口EDSFFE3 CM7 CD8P系列NVMe2.0 PCIe5.0

固态硬盘几个大厂&#xff0c;如果英特尔、铠侠、三星&#xff0c;陆续推出E3系列SSD&#xff0c;今天就我个人对E3系列的了解&#xff0c;做一个简单介绍。如有不妥&#xff0c;请多多交流 什么是E3&#xff1f; 简单理解就是一种新型的SSD外形尺寸。 E3 系列外形尺寸包含四种…

【教程】APP加固的那些小事

摘要 APP加固是保护APP代码逻辑的重要手段&#xff0c;通过隐藏、混淆、加密等操作提高软件的逆向成本&#xff0c;降低被破解的几率&#xff0c;保障开发者和用户利益。本文将介绍APP加固常见失败原因及解决方法&#xff0c;以及处理安装出现问题的情况和资源文件加固策略选择…

RabbitMQ发布确认高级版

1.前言 在生产环境中由于一些不明原因&#xff0c;导致 RabbitMQ 重启&#xff0c;在 RabbitMQ 重启期间生产者消息投递失败&#xff0c; 导致消息丢失&#xff0c;需要手动处理和恢复。于是&#xff0c;我们开始思考&#xff0c;如何才能进行 RabbitMQ 的消息可靠投递呢&…

Eohours防作弊算工时打卡HR管控系统(中英文版)

适用工程类算工时的企业&#xff0c;目前全世界拥有外劳的建筑企业更适合&#xff0c;他们有很多外国劳工&#xff0c;适合算工时。让工人得到一个公平&#xff0c;透明的工时数据&#xff0c;知道自己这个月能拿多少薪水。企业也能很好控制管理层和工人之间的协作&#xff0c;…