博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分支界限法 | 装载问题(先入先出队列式分支限界法)
阅读量:4880 次
发布时间:2019-06-11

本文共 1846 字,大约阅读时间需要 6 分钟。

 

 

输入要求

有多组数据。

每组数据包含2行。
第一行包含2个整数 C(1 <= C <= 1000)、和 n(1 <= n <= 10),分别表示的轮船的载重量和集装箱的个数。
第二行包含n个整数,依次表示n个集装箱的重量w。(0 <= w <= 1000)

输出要求

对于每组输入数据,按出队次序输出每个结点的信息,包括所在层数,编号,已装载重链,轮船上集装箱的个数

每个结点的信息占一行,如果是叶子结点且其所代表的装上轮船的集装箱的个数大于当前最优值(初始为0),则输出当前最优值 bestv 和最优解 bestx(另占一行)
参见样例输出

测试数据

输入示例

4 3
2 3 2

输出示例

1 1 0 0
2 2 2 1
2 3 0 0
3 5 2 1
3 6 3 1
3 7 0 0
4 10 4 2
bestv=2, bestx=[ 1 0 1 ]
4 11 2 1
4 13 3 1
4 14 2 1
4 15 0 0

小贴士

可采用如下的结构体存储结点:

typedef struct{
    int no; // 结点标号 
    int sw; // 轮船上集装箱的重量 
    int sum; // 轮船上集装箱的数量 
}Node;

 

#include
#include
typedef struct { int no; // 结点标号 int id; // 节点id int sw; // 轮船中的货物总重量 int sv; // 轮船中的物品个数 }Node;void branchknap(int *w,int n,int c) { int bestv = 0; int f = 0; int r = 0; Node que[3000]; int path[15]; que[0].no = 1; que[0].id = que[0].sv = que[0].sw = 0; while(f <= r) { Node node = que[f]; printf("%d %d %d %d\n",node.id+1,node.no,node.sw,node.sv); if(node.no >= pow(2,n)) { if(node.sv > bestv) { bestv = node.sv; printf("bestv=%d, bestx=[",bestv); int temp = node.no; int i = 0; while(temp > 1) { if(temp % 2 == 0) path[i] = 1; else path[i] = 0; temp /= 2; i++; } i--; while(i >= 0) { printf(" %d",path[i]); i--; } printf(" ]\n"); } } else { if((node.sw + w[node.id + 1]) <= c) { r++; que[r].id = node.id + 1; que[r].no = node.no * 2; int id = node.id + 1; que[r].sv = node.sv + 1; que[r].sw = node.sw + w[id]; } r++; que[r].id = node.id + 1; que[r].no = node.no * 2 + 1; que[r].sv = node.sv; que[r].sw = node.sw; } f++; } } int main() { int c,n; int w[15],v[15]; while(~scanf("%d %d",&c,&n)) { for(int i = 1; i <= n; i++) { scanf("%d",&w[i]); } branchknap(w,n,c); } return 0;}

  

转载于:https://www.cnblogs.com/jj81/p/10146498.html

你可能感兴趣的文章
COJ 2135 Day10-例1
查看>>
jdbc之分页查询
查看>>
PHP手动环境搭建之WAMP
查看>>
COJ 1003 WZJ的数据结构(三)ST表
查看>>
sbrk and coreleft
查看>>
树型DP
查看>>
怎么在ubuntu上使用pidgin登陆QQ
查看>>
思维的惰性
查看>>
2018-2019-2 网络对抗技术 20165115 Exp3 免杀原理与实践
查看>>
【Android】学习记录<1> -- 初识ffmpeg
查看>>
定位页面元素的位置
查看>>
关于IAsyncResult接口的CompletedSynchronously属性
查看>>
Python:一篇文章掌握Numpy的基本用法
查看>>
序列化与ArrayList 的elementData的修饰关键字transient
查看>>
学习进度17
查看>>
编译原理——算符优先分析文法(附源代码)
查看>>
jboss的启动过程
查看>>
渲染部分
查看>>
力扣——所有可能的路径
查看>>
关于VS项目平台的x86,x64,Any CPU以及Debug和Release的区别
查看>>