回溯法装载问题
08-16
#include
using namespace std;
class Loading
{
friend int MaxLoading(int [] ,int ,int ,int []);
private:
//int Bound(int i);
void Backtrack(int t); int n;//¼¯×°ÏäÊý int *x;//µ±Ç°½â int *bestx;//µ±Ç°×îÓŽâ int *w;//¼¯×°ÏäÖØÁ¿Êý×é int c;//µÚÒ»ËÒÂÖ´¬µÄÔØÖØÁ¿ int cw;//µ±Ç°ÖØÁ¿
int bestw;//µ±Ç°×îÓÅÔØÖØÁ¿
int r;//Ê£Ó༯װÏäÖØÁ¿
};
void Loading::Backtrack(int i)
{
if(i>n){
if(cw>bestw){
for(int j=1;jbestw){ x[i]=0; Backtrack(i+1);
}
r+=w[i];
}
int MaxLoading(int w[],int c,int n,int bestx[]){ Loading X;
X.x=new int[n+1];
X.w=w;
}
void main(){
int *w; int *bestx; int n; int c; cout>n; cout>c; w=new int[n+1]; w[0]=0; cout>w[i]; bestx=new int[n+1]; for(i=1;i
cout
}