分支与限界:货物装载问题(3)

2020-02-21 22:27

4.2.1程序流程图

图4-2优先队列限界法流程图

4.2.2 数据结构描述和算法

float bestw,w[100],bestx[100]; int n; Queue Q; struct QNode

第 11 页 共 16 页

{ float weight; QNode *parent; QNode LChild;} main( )

{ int c1,c2,n, s=0,i; input(c1,c2,n); for(i=1;i<=n;i++)

{ input(w[i]); s=s+w[i];}

if (s<=c1 or s<=c2) {print(“need only one ship”); return;} if (s>c1+c2) {print(“no solution”); return;} MaxLoading(c1); if (s-bestw <=c2);

{ print(“The first ship loading”, bestw,“chose:”); for(i=1;i<=n;i++)

if (bestx[i]=1) print(i,“,”);

print(“换行符 The second ship loading”, s-bestw,“chose”); for(i=1;i<=n;i++)

if (bestx[i]=0) print(i,”,”); }

else print(“no solution”); }

MaxLoading(int c)

{ Qnode *E; //活结点队列 int i = 1; //E-结点的层

E= new QNode; add (Q,0) ; //0代表分层标记 E->weight=0; E->parent =null; E->Lchild=0; add (Q,E) ; bestw=0; r=0; // E-结点中余下的重量 Ew=E->weight; //E-结点的重量 for (int j=2;j<=n;j++) r=r+ w[j]; while (true) // 搜索子集空间树

{ wt=Ew+w[i]; // 检查E-结点的左孩子 if (wt<=c) //可行的左孩子 { if (wt>bestw) bestw=wt; AddLiveNode(wt,i, E ,1);}

if (Ew+r>bestw) // 检查右孩子 AddLiveNode(Ew,i,E,0); Delete (Q,E ) ; // 下一个E-节点 if (E=0) // 层的尾部 { if (Empty(Q )) break;

add (Q, 0) ; // 层尾指针 Delete(Q,E) ; // 下一个E-结点

i++ ; // E-结点的层次 r=r-w[i]; } // E-结点中余下的重量 Ew=E->weight ; // 新的E-结点的重量

第 12 页 共 16 页

}

// 沿着从bestE到根的路径构造bestx[] for (j=n-1;j>0;j--)

{ bestx[j]=bestE->LChild; //从bool转换为int bestE=bestE->parent;} return bestw; }

4.3 测试结果与分析

图4.3 货物装载问题的解

由结果可以看出,当货箱的质量分别为12 14 16 20 25 时,两个货船的载重量分别为50,70.由此算法可以得到第一艘船可以达到满装 14 16 20,第二艘船可以装剩下的37。

第 13 页 共 16 页

第五章 结论

通过本次的算法设计,了解并熟练掌握了FIFO分支限界搜索算法和优先队列分支限界算法的使用,基本上完成了货物装载问题。输入数据后,快速的得到了本题的答案,也基本理解了算法设计的基本思想:

首先,对于一个算法设计例题,我们应该分析题目应该采取什么样的算法,也就是所谓的算法分析。比如本体采用的分支限界法中的FIFO分支限界和优先队列式分支限界。

其次,确定完成需要选用的算法,我们就要针对题目进行数据结构的分析,画出程序流程图,写出简单的算法。

最后,根据前面所写的算法,采用比较擅长的算法就行具体的实现。然后根据结果分析情况,加以修改,得到问题的最优解。

本题实现的语言采用的JAVA语言。也从横向比较了优先队列算法和FIFO算法的不同之处。加深了对他们的理解。与C、C++ 相比,JAVA语言具有很好的封装性,灵活性,行不其他语言实现较为简单、易懂、明了。通过此次算法设计也深刻了解了FIFO分支限界搜索算法和优先队列分支限界算法的内容,对于搜索算法的应用有了很深的理解。从本次课程设计当中,也明白了一般解决问题的方法,受益匪浅。

第 14 页 共 16 页

参考文献

[1] 算法设计与分析(第二版) 吕国英 主编 [2] Java语言程序设计(第八版) 李娜 译

第 15 页 共 16 页

指导教师评语: 1、文档: a、内容: 不完整□ 完整 □ 详细 □ b、方案设计: 较差 □ 合理 □ 非常合理□ c、实现: 未实现□ 部分实现□ 全部实现□ d、文档格式: 不规范□ 基本规范□ 规范 □ 2、答辩: a、未能完全理解题目,答辩情况较差 □ b、部分理解题目,部分问题回答正确 □ c、理解题目较清楚,问题回答基本正确 □ d、理解题目透彻,问题回答流利 □ 文档成绩: ,占总成绩比例: 40% 答辩成绩: ,占总成绩比例: 60% 总 成 绩: 指导教师签字: 年 月 日 第 16 页 共 16 页


分支与限界:货物装载问题(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2016年村镇建设档案室创建工作计划

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: