集装箱问题(回溯法)
来源:互联网 发布:阿里云和百度云 编辑:程序博客网 时间:2024/04/30 07:23
#include <stdio.h>
#define N 3
int w[3]={10,40,40};//3个物体的载重量
int c=70;//轮船的总载重量
int cw ; //当前获得的载重量
int bestw ;// 最优的载重量
int r=90; //剩余箱子的总重量
int x[3]={0}; //记录某一个可行解的路径
int bestx[3]={0};//记录最优解的路径
void backtrack(int i)//i表示树的层数
{
if( i>N )
{
if (cw > bestw)
{
for(int j=0;j<N;j++)
{
bestw = cw; //可能有多个可行解,在每次找到可行解后都要更新最优解
bestx[j]=x[j];//记录最优解的路径
}
}
return;//结束最后一层的函数,回溯到上一层进行递归调用
}
r -= w[i-1];
if( cw + w[i-1] <= c)//x[i-1]=1
{
cw += w[i-1];
x[i-1]=1;
backtrack(i+1);
cw -= w[i-1];//回溯到上一层又要把当前总载重量减掉
}
if( cw+r > bestw)//上界函数,如果当前重量加上剩余的最大重量都小于当前最优解的重量
{
x[i-1]=0;
backtrack(i+1);
}
r += w[i-1] ;
}
void main()
{
int i;
backtrack(1);
for(i=0;i<N;i++)
printf("%d\n",bestx[i]);
printf("%d\n",bestw);
}
- 集装箱问题(回溯法)
- 回溯算法之集装箱问题
- 集装箱问题
- 集装箱问题
- 集装箱装载问题
- Java -集装箱问题
- 棋盘问题(回溯法)
- 布线问题(回溯法)
- 小小集装箱(不断更新中...)
- 0-1背包问题(回溯法)
- 0-1背包问题(回溯法)
- N后问题(回溯法)
- 0-1背包问题(回溯法)
- 回溯法(子集树)----- 装载问题
- 八皇后问题(回溯法)
- HDU2553 N皇后问题(回溯法)
- N皇后问题(回溯法)
- 八皇后问题(回溯法)
- java加密解密详解
- 关联规则
- 关于工作流引擎流程轨迹表的效率提高改进内容发布
- hdu4432 Sum of divisors
- c++实现aes加密算法,对字符串进行加密
- 集装箱问题(回溯法)
- Dynamic proxy与 CGLib 的区分
- 重温操算符重载(一)
- 单模匹配之KMP算法简解
- virtual destructor
- javascript类与对象的实现
- cxgrid的用法
- 比较常用的文件处理类
- struts2和servlet的共存问题