自己写的代码:
#include <iostream>
using namespace std;
template <class Type>
class Loading
{
//friend Type MaxLoading(Type[],Type,int,int []);
//private:
public:
void Backtrack(int i);
int n, //集装箱数
*x, //当前解
*bestx; //当前最优解
Type *w, //集装箱重量数组
c, //第一艘轮船的载重量
cw, //当前载重量
bestw, //当前最优载重量
r; //剩余集装箱重量
};
//template <class Type>
//void Loading <Type>::Backtrack (int i);
template<class Type>
Type MaxLoading(Type w[], Type c, int n, int bestx[]);
int main()
{
int n=10,m;
int c=500,c2=121;
int w[11]={
0,21,54,21,45,20,65,320,1,20,54};
int bestx[10];
m=MaxLoading(w, c, n, bestx);
cout<<"轮船的载重量分别为:"<<endl;
cout<<"c(1)="<<c<<",c(2)="<<c2<<endl;
cout<<"待装集装箱重量分别为:"<<endl;
cout<<"w(i)=";
for (int i=1;i<=n;i++)
{
cout<<w[i]<<" ";
}
cout<<endl;
cout<<"回溯选择结果为:"<<endl;
cout<<"m(1)="<<m<<endl;
cout<<"x(i)=";
for (int i=1;i<=n;i++)
{
cout<<bestx[i]<<" ";
}
cout<<endl;
int m2=0;
for (int j=1;j<=n;j++)
{
m2=m2+w[j]*(1-bestx[j]);
}
cout<<"m(2)="<<m2<<endl;
if(m2>c2)
{
cout<<"因为m(2)大于c(2),所以原问题无解!"<<endl;
}
return 0;
}
template <

这篇博客探讨了如何使用回溯法来解决装载问题。作者提供了四个程序实现,详细阐述了回溯法在解决此类问题中的应用,并给出了有序输出的结果。
最低0.47元/天 解锁文章
2031

被折叠的 条评论
为什么被折叠?



