【算法设计】实验五分支限界法(附源代码)

这里写目录标题

  • 一、上机目的
  • 二、上机内容与要求
  • 三、上机步骤
  • 四、上机结果
    • 1、将课本6.2节单源最短路径算法改为程序,并进行测试和验证
    • 2、将课本6.3节装载问题改为程序,并进行测试和验证。

一、上机目的

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

二、上机内容与要求

1、分析并掌握“单源最短路径” 问题的分支限界法求解方法;
2、练习使用分支限界法求解“装载”问题;

三、上机步骤

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

四、上机结果

1、将课本6.2节单源最短路径算法改为程序,并进行测试和验证

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;class ArcCell {int adj;  // 保存权值int info; // 存储最短路径长度
}public class GraphPath {static ArcCell[][] AdjMatrix = new ArcCell[100][100];static VerType[] vexs = new VerType[100];static int vexnum;static int arcnum;static Queue<Integer> q = new LinkedList<>();static class VerType {int data;int length;}static void CreateGraph() {Scanner scanner = new Scanner(System.in);int m, n, t;System.out.print("输入顶点数和弧数:");vexnum = scanner.nextInt();arcnum = scanner.nextInt();System.out.print("输入顶点:");for (int i = 1; i <= vexnum; i++) {vexs[i] = new VerType();vexs[i].data = scanner.nextInt();vexs[i].length = 10000;}for (int i = 1; i <= vexnum; i++)for (int j = 1; j <= vexnum; j++) {AdjMatrix[i][j] = new ArcCell();AdjMatrix[i][j].adj = 0;}System.out.println("输入弧及权重:");for (int i = 1; i <= arcnum; i++) {m = scanner.nextInt();n = scanner.nextInt();t = scanner.nextInt();AdjMatrix[m][n].adj = 1;AdjMatrix[m][n].info = t;}}static int NextAdj(int v, int w) {for (int i = w + 1; i <= vexnum; i++)if (AdjMatrix[v][i].adj != 0)return i;return 0; // not found;}static void ShortestPaths(int v) {int k = 0; // 从首个节点开始访问int t;vexs[v].length = 0;q.offer(vexs[v].data);while (!q.isEmpty()) {t = q.poll();k = NextAdj(t, k);while (k != 0) {if (vexs[t].length + AdjMatrix[t][k].info <= vexs[k].length) {vexs[k].length = vexs[t].length + AdjMatrix[t][k].info;q.offer(vexs[k].data);}k = NextAdj(t, k);}}}static void Print() {for (int i = 1; i <= vexnum; i++)System.out.println(vexs[i].data + "------" + vexs[i].length);}public static void main(String[] args) {CreateGraph();ShortestPaths(1);Print();}
}

在这里插入图片描述

2、将课本6.3节装载问题改为程序,并进行测试和验证。

import java.util.PriorityQueue;
import java.util.Scanner;class MaxHeapQNode {MaxHeapQNode parent;  // 父节点int lchild;           // 左节点: 1; 右节点: 0int weight;           // 总重量int lev;              // 层次
}class MaxLoading {static int n;static int c;static int bestw;static int[] w;static int[] bestx;public static void main(String[] args) {InPut();MaxLoading();OutPut();}static void InPut() {Scanner scanner = new Scanner(System.in);System.out.println("Input1:");n = scanner.nextInt();System.out.println("Input2:");c = scanner.nextInt();System.out.println("Input3:");w = new int[n + 1];bestx = new int[n + 1];for (int i = 1; i <= n; ++i)w[i] = scanner.nextInt();}static void AddAliveNode(PriorityQueue<MaxHeapQNode> q, MaxHeapQNode E, int wt, int i, int ch) {MaxHeapQNode p = new MaxHeapQNode();p.parent = E;p.lchild = ch;p.weight = wt;p.lev = i + 1;q.add(p);}static void MaxLoading() {PriorityQueue<MaxHeapQNode> q = new PriorityQueue<>((a, b) -> Integer.compare(b.weight, a.weight));// 定义剩余重量数组rint[] r = new int[n + 1];r[n] = 0;for (int j = n - 1; j > 0; --j)r[j] = r[j + 1] + w[j + 1];int i = 1;MaxHeapQNode E = new MaxHeapQNode();int Ew = 0;while (i != n + 1) {if (Ew + w[i] <= c) {AddAliveNode(q, E, Ew + w[i] + r[i], i, 1);}AddAliveNode(q, E, Ew + r[i], i, 0);// 取下一节点E = q.poll();i = E.lev;Ew = E.weight - r[i - 1];}bestw = Ew;for (int j = n; j > 0; --j) {bestx[j] = E.lchild;E = E.parent;}}static void OutPut() {System.out.println("最优装载量为 " + bestw);System.out.println("装载的物品为 ");for (int i = 1; i <= n; ++i)if (bestx[i] == 1)System.out.print(i + " ");}
}

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

SAP 消息号AA377

客户在做资产报废的时候&#xff0c;出现以下报错 解决办法&#xff1a;OAAQ “历史数据传输状态”变成“已完成”就OK

揭秘数据之美:利用 Bokeh 轻松构建实时、动态的数据可视化项目

1、引言 想让你的数据跃然 “屏” 上&#xff1f;厌倦了静态图表的平淡无奇&#xff1f;那么&#xff0c;今天就让我们一起探索 Python 世界中的瑰宝 ——Bokeh 库。这款强大的可视化工具以其流畅的交互性和实时更新能力&#xff0c;让你的数据呈现如电影般生动立体&#xff0…

【记录 | 基础动态规划】:数字三角形

数字三角形 链接:[USACO1.5] [IOI1994]数字三角形 Number Triangles 题目描述 观察下面的数字金字塔。 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。 在上面的样例中,从 7 → 3 → 8 → 7 →…

一文掌握mysql中的查询语句

目录 1. 聚合查询1.1 聚合函数1.2 GROUP BY子句1.3 HAVING 2. 联合查询2.1 内连接2.2 外连接2.3 自连接2.4 子查询2.5 合并查询 1. 聚合查询 1.1 聚合函数 常见的统计总数、计算平局值等操作&#xff0c;可以使用聚合函数来实现&#xff0c;常见的聚合函数有&#xff1a; 函…

【知识库系统】使用SpringSecurity进行身份认证

一、理论知识部分 SpringSecurity 的官网文档地址&#xff1a;SpringSecurity 这里以24年3月份的 6.2.2 版本为例&#xff0c;记录一下学习过程。 1. SpringSecurity 是基于 Servlet Filters 的&#xff0c;而 Servlet Filters 中的流程如下&#xff1a;首先由客户端 Client…

11双体系Java学习之方法

方法简述 package method;public class Demo01 {//main 方法public static void main(String[] args) {//实际参数&#xff1a;实际调用传递给他的参数int sum add (1,2);System.out.println(sum);//test();}//加法//形式参数&#xff0c;用来定义作用的public static int add…

明明jar包存在却报错找不到包名?两招教你解决java: 程序包org.springframework.context.annotation不存在问题!

一、问题提出 IDEA项目有时因为依赖库的问题出现出错&#xff1a; java: 程序包org.springframework.context.annotation不存在&#xff0c;如下图。 二、解决办法 方案1&#xff1a; 重新导入项目 ① 将项目中 .idea .iml 全部删除&#xff0c;项目重新导入 ② 用idea重新…

外盘期货商品配资软件开发/如何接主账号接口

外盘期货商品配资软件接主账号接口的过程涉及多个步骤&#xff0c;以下是一般性的指导&#xff1a; 了解接口规范&#xff1a;首先&#xff0c;你需要了解主账号接口的具体规范&#xff0c;包括接口协议、数据格式、传输方式、认证机制等。这通常可以通过查阅相关的文档或向提…

Kubernetes activemq系列| k8s 部署activemq artemis 集群(可外部通信)

一、ActiveMQ Artemis介绍 Apache ActiveMQ Artemis 是一个高性能的开源消息代理&#xff0c;它完全符合 Java Message Service (JMS) 2.0 规范&#xff0c;并支持多种通信协议&#xff0c;包括 AMQP、MQTT、STOMP 和 OpenWire 等。ActiveMQ Artemis 由 Apache Software Found…

杂七杂八111

MQ 用处 一、异步。可提高性能和吞吐量 二、解耦 三、削峰 四、可靠。常用消息队列可以保证消息不丢失、不重复消费、消息顺序、消息幂等 选型 一Kafak:吞吐量最大&#xff0c;性能最好&#xff0c;集群高可用。缺点&#xff1a;会丢数据&#xff0c;功能较单一。 二Ra…

ChatGPT浪潮来袭!谁先掌握,谁将领先!

任正非在接受采访时说 今后职场上只有两种人&#xff0c; 一种是熟练使用AI的人&#xff0c; 另一种是创造AI工具的人。 虽然这个现实听起来有些夸张的残酷&#xff0c; 但这就是我们必须面对的事实 &#x1f4c6; 对于我们普通人来说&#xff0c;我们需要努力成为能够掌握…

1960-2020年全球双边迁移数据库(Global Bilateral MigrationDatabase)

1960-2020年全球双边迁移数据库&#xff08;Global Bilateral MigrationDatabase&#xff09; 1、时间&#xff1a;1960-2000年&#xff0c;每10年一次具体为&#xff1a;1960年、1970年、1980年、1990年、2000年 2、来源&#xff1a;世界银行 3、指标&#xff1a;Country O…