分支限界法解作业分配问题的实现(C++)

2023-11-08

#include<iostream>
using namespace std;
#define MAX_FLOAT_NUM 10000.0
#define N 4

struct ass_node{
	int x[N];   //分配给操作员的作业
	int k;      //搜索深度
	float t;    //当前搜索深度下,已分配的作业所需时间
	float b;     //本结点所需的时间下界
	struct ass_node *next;
};

typedef struct ass_node ASS_NODE;

float c[N][N];   //n个操作员分别完成n项作业所需的时间
float bound;    //当前已搜索到的可行解的最优时间
ASS_NODE *qbase;  //优先队列的首指针

void Q_insert(ASS_NODE *qbase,ASS_NODE *xnode){
	ASS_NODE *p;
	if(qbase->next==NULL){
		qbase->next=xnode;
		xnode->next=NULL;
	}
	else if(xnode->b < qbase->next->b){
		xnode->next=qbase->next;
		qbase->next=xnode;
	}
	else{
		p=qbase->next;
		while(p->next){
			if((xnode->b > p->b)&&(xnode->b < p->next->b)){
				xnode->next=p->next;
				p->next=xnode;
				break;
			}
			p=p->next;
		}
		if(p->next==NULL){
			p->next=xnode;
			xnode->next=NULL;
		}
	}

}



ASS_NODE *Q_delete(ASS_NODE *qbase){
	ASS_NODE *p;
	p=qbase->next;
	qbase->next=p->next;
	return p;
}

float job_assigned(float c[][N],int n,int job[])
{
	int i,j,m;
	ASS_NODE *xnode,*ynode,*qbase;
	qbase=new ASS_NODE;
	qbase->next=NULL;
	float min,bound=MAX_FLOAT_NUM;
	xnode=new ASS_NODE;
	for(i=0;i<n;i++)      //初始化xnode所指向的根结点
		xnode->x[i]=-1;  
	xnode->t=xnode->b=0;
	xnode->k=0;
	while(xnode->k!=n){          //非叶子结点,继续向下搜索
		for(i=0;i<n;i++){            //对n 个操作员分别判断处理
			if(xnode->x[i]==-1){    //操作员i尚未分配作业
				ynode=new ASS_NODE;   //为操作员i建立一个结点         
				*ynode=*xnode;         //把父亲结点的数据复制给它
				ynode->x[i]=ynode->k;    //把作业k分配给操作员i
				ynode->t +=c[i][ynode->k];   //已分配的作业的时间累计
				ynode->b=ynode->t;
				ynode->k++;                  //该结点下一次的搜索深度
				for(j=ynode->k;j<n;j++){      //未分配作业最小时间估计
					min=MAX_FLOAT_NUM;
					for(m=0;m<n;m++){
						if((ynode->x[m]==-1)&&(c[m][j]<min))
							min=c[m][j];
					}
					ynode->b += min;
				}
				if(ynode->b<bound){        //小于可行解的最优下界
					Q_insert(qbase,ynode);   //把结点按下界插入优先队列
					if(ynode->k==n)           //已得到一个可行解
						bound=ynode->b;        //更新可行解的最优下界
				}
				else delete ynode;           //大于可行解的最优下界,剪除
			}
		}
		delete xnode;                    //释放结点xnode的缓冲区
		xnode=Q_delete(qbase);           //取下对首元素xnode
	}
	min=xnode->b;           //保存下界,以便作为返回值返回
	for(i=0;i<n;i++)         //把分配方案保存与数组job中返回
		job[i]=xnode->x[i];  
	while(qbase->next){     //释放结点缓冲区
		xnode=Q_delete(qbase);
		delete xnode;
	}
	return min;
}

void main()
{
	int i,j;
	int job[N];
	cout<<"请输入各操作员完成各项作业所需要的时间:"<<endl;
	for(i=0;i<N;i++)
		for(j=0;j<N;j++)
			cin>>c[i][j];
	cout<<"完成任务的最优时间为:\n";
	cout<<job_assigned(c,4,job)<<endl;
	cout<<"作业分配方案为:"<<endl;
	cout<<"作业号:\t0\t1\t2\t3\t"<<endl;
	cout<<"操作员:\t"<<job[0]<<"\t"<<job[1]<<"\t"<<job[2]<<"\t"<<job[3]<<"\t"<<endl;
	cout<<"耗  时:\t"<<c[0][job[0]]<<"\t"<<c[1][job[1]]<<"\t"<<c[2][job[2]]<<"\t"<<c[3][job[3]]<<"\t"<<endl;

} 

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分支限界法解作业分配问题的实现(C++) 的相关文章

  • 在c++中定义一堆静态方法

    哪个是合适的 class xyz static int xyzOp1 static int xyzOp2 OR namespace xyz static int xyzOp1 static int xyzOp2 当我们使用类标签与命名空间标
  • -ffast-math 可以安全地用于典型项目吗?

    在回答我建议的问题时 ffast math 有评论指出这是危险的 我个人的感觉是 在科学计算之外 是可以的 我还假设严肃的金融应用程序使用定点而不是浮点 当然 如果你想在你的项目中使用它 最终的答案是在你的项目上测试它 看看它有多大影响 但
  • C++ STL 映射,std::pair 作为键

    这就是我通过地图定义的方式 std map
  • StackExchange Redis 删除所有以以下开头的键

    我有一个格式的密钥 Error 1 Error 24 Error 32 Using StackExchange Redis 我该怎么办KeyDelete在与格式匹配的所有键上Error 在另一个答案中我看到了 LUA 脚本 EVAL ret
  • 使用 C 的另一个结构内的灵活长度结构数组

    你好 我正在尝试使用 C 来实现一个简单的结构 2 个盒子 每个盒子包含不同数量的颗粒 main 中传递的粒子的确切数量 我写了以下代码 typedef struct Particle float x float y float vx fl
  • 如何配置 Ninject 来注入 NodaTime IClock

    在我的 NinjectConfigurator 中我有 container Bind
  • 二叉树和快速排序?

    我有一个家庭作业 内容如下 别生气 担心 我是not请你帮我做作业 编写一个程序 通过使用二分查找的快速排序方法对一组数字进行排序 树 推荐的实现是使用递归算法 这是什么意思 到目前为止 这是我的解释 正如我在下面解释的那样 我认为两者都有
  • MVC BaseController 处理 CRUD 操作

    我想重构我的基本 CRUD 操作 因为它们非常重复 但我不确定最好的方法 我的所有控制器都继承 BaseController 如下所示 public class BaseController
  • 如何查看每秒更新的图表中的最后 10 个数据点?

    我有这个代码 private void timer Tick object sender EventArgs e timer Stop for int i 0 i lt TOTAL SENSORS i DateTime d DateTime
  • 如何在 C++11 中返回类成员向量

    我读了几篇关于如何从方法返回向量的文章 其中包括 c11 右值和移动语义混淆返回语句 https stackoverflow com questions 4986673 c11 rvalues and move semantics conf
  • 将两个垂直滚动条相互绑定

    我在控件中有两个 TextBox 并且它们都有两个 VerticalScrollBar 我想在它们之间绑定 VerticalScrollBars 如果一个向上 第二个也会向上等等 如果可以的话我该怎么做 Thanks 不是真正的绑定 但它有
  • C 编程中的 rand() 问题? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么我总是用 rand 得到相同的随机数序列 https stackoverflow com questions 1108780 why do i always get the same seque
  • Qt 多重继承和信号

    由于 QObject 我在 QT 中遇到了有关多重继承的问题 我知道很多人也有同样的问题 但我不知道该如何解决 class NavigatableItem public QObject Q OBJECT signals void desel
  • 批量插入,asp.net

    我需要获取与会员相对应的 ID 号列表 在任何给定时间处理的数量可能在 10 到 10 000 之间 我可以毫无问题地收集数据 解析数据并将其加载到 DataTable 或任何内容 C 中 但我想在数据库中执行一些操作 将所有这些数据插入表
  • 以编程方式阻止 Vista 桌面搜索 (WORDS) 对映射网络驱动器上的 pst 文件建立索引

    经过几天的多次尝试 我没有找到任何 100 的解决方案来解决这个问题 我的搜寻和调查范围 直接访问注册表 HKLM SOFTWARE Microsoft Windows Search CrawlScopeManager Windows Sy
  • 在 OSX 上检测 Objective C 或 C++ 中的文件夹访问(如 fs_usage 命令)

    我正在 OSX 上开发实时病毒扫描程序 OSX 的命令行命令fs usage可以通过以下方式确定文件夹访问权限 并且只能以 root 用户身份运行 fs usage w f pathname grep Users Documents Use
  • C# 中的 mshtml.HTMLDocumentClass

    在 C 中 我设法从 InternetExplorer 对象获取整个 HTMLDocumentClass 导航到某个 URL 然而 在 Visual Studio 2008 的调试模式下 该特定 URL 的 HTMLDocumentClas
  • 在for循环中声明和初始化变量

    可以简单写一下吗 for int i 0 代替 int i for i 0 在 C 或 C 中 并且会变量i只能在循环内部访问 它在 C 中有效 它在 C 的原始版本中是不合法的 但在 C99 中被采用为 C 的一部分 当时一些 C 功能被
  • Web 和 winforms 的 .Net 身份验证

    我有一个为客户端构建的 ASP NET Web 应用程序 它使用默认的 ASP NET 表单身份验证 他们现在请求一个能够 与 Web 应用程序一起工作的桌面 WinForms 应用程序 我已经创建了 Web 服务来访问他们想要从 Web
  • 获取线段上最接近另一个点的点[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我想找到线段AB上最接近另一个点P的点 我的想法是 Get a1 and b1由直线公式y1 a1x b1 使用 A 点

随机推荐

  • STM32(HAL库)驱动(2.0寸)TFT-LCD彩屏(240*320)

    目录 1 简介 2 CubeMX初始化配置 2 1 基础配置 2 1 1 SYS配置 2 1 2 RCC配置 2 2 屏幕引脚配置 2 3 项目生成 3 KEIL端程序整合 3 1 LCD驱动添加 3 2 函数修改 3 2 1 lcd h修
  • ssm dao层无法注入

    在ssm项目中通过ClassPathXmlApplicationContext获取持久层 然后测试mapper 遇到BindingException异常 org apache ibatis binding BindingException
  • PCIe专题学习——5.0(总线电源管理)

    之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍 了解了PCIe是一种封装分层协议 packet based layered protocol 主要包括事务层 Transaction layer 数据链路层 Data link lay
  • Jmeter教程(一) - 入门

    Jmeter教程 一 入门Jmeter教程 二 自定义变量模拟多用户Jmeter教程 三 Linux中使用命令行进行压测 一 下载 登录官网Jmeter下载 得到压缩包jmeter 5 0 tgz 下载地址 http jmeter apac
  • CMS垃圾回收器

    目录 1 CMS收集器 2 CMS收集过程 3 CMS垃圾收集实践 4 CMS垃圾收集优缺点 4 1 分配担保机制 4 2 CMS的问题 5 小结 前言 虽然新出的G1优点明显 但是CMS算法依然是目前项目中使用的最多的垃圾收集器 G1可能
  • xp系统sc服务器,Windows XP系统服务配置攻略 SC Config

    Windows XP系统服务配置攻略 SC Config IT168 实用技巧 对于经常重装系统的朋友来说 出于优化系统 减少内存占用亦或增强系统安全性能 往往都会修改很多系统服务的启动类型 将大量无用或者危险的服务关闭 参照许多服务优化的
  • Qt5设置窗口、控件背景、字体颜色及无边框

    Qt5设置窗口 控件背景 字体颜色及无边框 无边框设置 以QTextbroswer为例 代码设置 使用样式表 ui gt describeText gt setStyleSheet QTextBrowser border width 0 b
  • 如何使用全局变量QT

    兩種方法 第一 使用extern關鍵字聲明 不推薦 破壞了封裝性 第二 新建一個類 存放全局的變量 函數 第一 使用extern關鍵字聲明 不推薦 破壞了封裝性 在一个头文件中声明int var name全局变量 在另一个cpp文件中引用此
  • Mysql 内置函数大全

    转载并整理 包括 数值进制 字符串长度 截取 填充 删除 拼接等 文件读取 数值绝对值 正负判断 取模 取整 次方 对数 开方 三角函数 反三角函数 随机数 弧度和角度 精确度保留 最大值和最小值等 日期判断 格式 加减 时间戳等 ASCI
  • 使用netty写一个心跳包

    当使用Netty编写一个心跳包时 需要实现一个自定义的ChannelHandler来处理心跳包的发送和接收 以下是一个简单的示例 演示如何使用Netty发送和接收心跳包 import io netty bootstrap Bootstrap
  • 安装Android SDK 报错Download finished with wrong size

    解决方法 可行 tools gt Options gt HTTP Proxy Server 中填入 mirrors opencas cn sdk gdgshanghai com ubuntu buct edu cn mirrors neus
  • count(*)与count(1)的区别

    count 与count 1 的区别 1 如果列为主键 count 列名 效率优于count 如果列不为主键 count 1 效率优于count 列名 如果表中存在主键 count 主键列名 效率最优 如果表中只有一列 则count 星号
  • vue 横纵向打印

    用单选框来切换打印时的方向 div class dialog footer div
  • AI在玩一种很新的艺术,700万网友在线围观,ControlNet又立功了

    梦晨 西风 发自 凹非寺量子位 公众号 QbitAI AI又在玩一种很新的艺术 一组 在离谱与合理的边缘反复试探 的图席卷各大平台 最火的一条 已有近700万查看16 8万点赞 到处有人在求教程 除了棋盘样式 还有一种螺旋样式的也很流行 连
  • 操作系统 第七章 文件管理

    从用户的观点看 操作系统中引入文件系统的目的是 D A 实现虚拟存储 B 保存用户和系统文档及数据 C 保护用户数据 D 实现对文件的按名存取 文件系统中 文件访问控制信息存储的合理位置是 A A 文件控制块 B 系统注册表 C 文件分配表
  • C#编写的基于VLC的播放器

    首先看一下最终的程序效果 实现的功能 1 打开播放的音视频文件 1 菜单栏 文件 gt 打开 2 工具栏 下面 打开 3 播放器右键 gt 打开 2 暂停 继续播放 停止音视频文件 3 进度条和右下角文本框显示播放进度 4 拖动进度条对视频
  • 【牛客SQL】SQL29 使用join查询方式找出没有分类的电影id以及名称

    题目描述 题解 子查询 NOT IN 判断 JOIN 运行时间 18ms 超过47 56 用Sqlite提交的代码 占用内存 3588KB 超过10 01 用Sqlite提交的代码 SELECT film id title FROM fil
  • BERTopic

    论文标题 BERTopic Neural topic modeling with a class based TF IDF procedure 论文作者 Maarten Grootendorst 论文链接 https arxiv org p
  • vue 引入weixin-js-sdk报错: import wx from ‘weixin-js-sdk‘ wx=‘undefined‘

    vue 中通过 npm 引入 weixin js sdk 使用 wx config 时报错了 c0e6 189 Uncaught in promise TypeError Cannot read property config of und
  • 分支限界法解作业分配问题的实现(C++)

    include