ImageVerifierCode 换一换
格式:DOC , 页数:17 ,大小:102.50KB ,
资源ID:2770614      下载积分:20 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-2770614.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机算法分析与设计(第四版)习题算法分析部分详解(实验六).doc)为本站会员(dreamzhangning)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

计算机算法分析与设计(第四版)习题算法分析部分详解(实验六).doc

1、参考代码实验六 分支限界法/6-1、6-6 项目 VC+6.0 测试通过/6-15 项目 VC2005 测试通过/6-1 最小长度电路板排列问题/头文件 stdafx.h/ stdafx.h : include file for standard system include files,/ or project specific include files that are used frequently, but/ are changed infrequently/#pragma once#define WIN32_LEAN_AND_MEAN / Exclude rarely-used s

2、tuff from Windows headers#include #include / TODO: reference additional headers your program requires here/ sy61.cpp : Defines the entry point for the console application./ /Description: /分支限界法 6_1 最小长度电路板排列问题 /#include “my.h“#include “stdafx.h“#include #include using namespace std; int n,m;/#includ

3、e “OutOfBounds.h“/定义节点类class BoardNode参考代码friend int FIFOBoards(int *,int ,int,int */非类成员,可以访问私有成员的函数,最优序列查找public:operator int() constreturn cd;/返回常数 cdint len();public:int *x,s,cd,*low,*high;/x 表示当前节点的电路板排列,s 表示当前节点排列好的电路板的数/表示当前节点的最大长度,low,high 分别表当前节点表示每一个连接块的第一个,和最后一个电路板/的位置;/编写类的 len()函数,求出当前节

4、点的连接块长度的最大值int BoardNode:len()int tmp=0;for(int k=1;k0 /声明 BoardNode 类的节点队列 qBoardNode E;E.x=new intn+1;/为数组指针 x 分配 n+1 个动态空间,存储当前的排列E.s=0;/最初时,排列好的电路板的数目为 0E.cd=0;E.low=new intm+1;/存储每个连接块的第一个电路板的位置E.high=new intm+1;/存储每个连接块的最后一个电路板的位置for(int i=1;iE.highj)E.highj=n;int ld=E.len();/存储当前节点的各连接块长度中的最大

5、长度/如果当前的最大长度小于了 n+1if(ldN.highj)N.highj=curr;N.cd=N.len();/如果,当前节点的最大长度小于了最优长度则:if(N.cdnm;int *B=new int*n+1;for (int t=0; tBij;参考代码/scanf(“%d“,int *bestx=new intn+1;int bestd=0;bestd=FIFIOBoards(B,n,m,bestx);printf(“%dn“,bestd);for(i=1;i #include #include #include #include using namespace std; /本例子

6、直接输入棋盘大小,不用文件/ifstream in(“input.txt“); /请在项目文件夹下新建一个 input.txt/ofstream out(“output.txt“); class Node public: Node(int n) t = 0; this-n = n; loc = new intn + 1; for (int i = 0; it = other.t; this-n = other.n; this-loc = new int n + 1; for (int i = 0; i loci = other.loci; int t;/已放置 t 个皇后 参考代码int *l

7、oc;/loc1:t int n;/共放置 n 个皇后 bool checkNext(int next); void printQ(); ; bool Node:checkNext(int next) int i; for (i = 1; i n = n; ansNum = 0; void ArrangQueen(); ; void Queen:ArrangQueen() queue Q; Node ini(n); /初始化参考代码Q.push(ini); while(!Q.empty() Node father = Q.front(); /取队列下一个节点Q.pop(); if (fathe

8、r.t = n) father.printQ(); +ansNum; for (int i = 1; i n; /从文件中读入一个整数/for(int Case = 1; Case n; Queen Q(n); Q.ArrangQueen(); /out#include / TODO: reference additional headers your program requires here/头文件 MinHeap2.h;最小堆实现#include template class Graph; template class MinHeap template friend class Grap

9、h; public: MinHeap(int maxheapsize = 10); MinHeap()delete heap; int Size() constreturn currentsize; T Max()if(currentsize) return heap1; MinHeap MinHeap void Initialize(T x, int size, int ArraySize); void Deactivate(); void output(T a,int n); private: int currentsize, maxsize; T *heap; ; 参考代码templat

10、e void MinHeap:output(T a,int n) for(int i = 1; i MinHeap:MinHeap(int maxheapsize) maxsize = maxheapsize; heap = new Tmaxsize + 1; currentsize = 0; template MinHeap int i = +currentsize; while(i != 1 if(y void MinHeap:Initialize(T x, int size, int ArraySize) delete heap; heap = x; currentsize = size

11、; maxsize = ArraySize; for(int i = currentsize / 2; i = 1; i-) T y = heapi; int c = 2 * i; while(c heapc + 1) c+; if(y void MinHeap:Deactivate() heap = 0; /批作业调度问题 优先队列分支限界法求解 /算法编码与教材一致#include “stdafx.h“ #include “MinHeap2.h“ #include using namespace std; class Flowshop; class MinHeapNode friend F

12、lowshop; public: operator int() const return bb; private: void Init(int); void NewNode(MinHeapNode,int,int,int,int); int s, /已安排作业数 f1, /机器1上最后完成时间 f2, /机器2上最后完成时间 sf2, /当前机器2上完成时间和 bb, /当前完成时间和下界 *x; /当前作业调度 ; class Flowshop friend int main(void); public: int BBFlow(void); private: 参考代码int Bound(Mi

13、nHeapNode E,int void Sort(void); int n, /作业数 * M, /各作业所需的处理时间数组 *b, /各作业所需的处理时间排序数组 *a, /数组M和b的对应关系数组 *bestx, /最优解 bestc; /最小完成时间和 bool *y; /工作数组 ; template inline void Swap(Type int main() int n=3,bf; int M132=2,1,3,1,2,3; int *M = new int*n; int *b = new int*n; int *a = new int*n; bool *y = new bo

14、ol*n; int *bestx = new intn; for(int i=0;ii; k-) if(bkjE.f2)?f1:E.f2)+ME.xE.s1; int sf2 = E.sf2 + f2; int s1 = 0,s2 = 0,k1 = n-E.s,k2 = n-E.s,f3 = f2; /计算s1的值 for(int j=0; jf1+bj0)?f2:f1+bj0; s1 += f1+k1*bj0; /计算s2的值 for(int j=0; js2)?s1:s2); /解批处理作业调度问题的优先队列式分支限界法 int Flowshop:BBFlow(void) Sort();/对各作业在机器1和2上所需时间排序 MinHeap H(1000); MinHeapNode E; /初始化 E.Init(n); /搜索排列空间树 while(E.s inline void Swap(Type a=b; b=temp;

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报