数组动态分配 程序在cfree执行不正确
虫洞 2008-12-20 11:56:43 程序中用动态分配数组长度
用c_free4.1执行结果不正确,为
0
0000000000
用vc++6.0就行,为
20
1110010000
想问下是不是c_free的问题,还是代码设置不规范
程序算法没问题,内容不重要,只是当一个例子[code=//回溯法装载问题
#include <iostream>
using namespace std;
#define WEIGHT int
class Loading
{
public:
Loading();
void Backtrack(int i);
void getbestw();
private:
int n;//集装箱数目
int *x;//当前解
int *bestx;//当前最优解
int *w;//集装箱重量数组
WEIGHT c;//第一艘轮船的载重量 现在只考虑了一艘轮船吗?
WEIGHT cw;//当前载重量
WEIGHT bestw;//当前最优载重量
WEIGHT r;//剩余集装箱的重量
};
Loading::Loading()
{
//初始化
int i;
n=10;
x=new int[n];
bestx=new int[n];
w=new int[n];
w[0]=12;w[1]=1;w[2]=2;w[3]=3;w[4]=4;w[5]=5;w[6]=6;w[7]=7;w[8]=8;w[9]=9;
c=20;
cw=0;
bestw=0;
for (i=0;i<n;i++) { x[i]=0; bestx[i]=0; }
r=0;
for (i=0;i<n;i++) r+=w[i];
}
void Loading::Backtrack(int i)
{
if(i>n) //到达叶子节点
{
if(cw > bestw)
{
for(int j=0;j<n;j++)
bestx[j]=x[j];
bestw=cw;
}
return;
}
//搜索左子树
r-=w[i];
if(cw + w[i] <=c)
{
x[i]=1; //x[i]==1,也就是包含某个集装箱的情况
cw += w[i];
Backtrack(i+1);
cw -= w[i];
}
if(cw+r>=bestw)
{
//搜索右子树
x[i]=0; //x[i]==0,也就是不包含某个集装箱的情况
Backtrack(i+1);
}
r+=w[i];
}
void Loading::getbestw()
{
cout<<bestw<<endl; //输出第一艘船尽可能装的重量
for(int i=0;i<n;i++) //输出装进第一艘船的集装箱序列
cout<<bestx[i];
cout<<endl;
}
int main()
{
Loading X;
X.Backtrack(0);
X.getbestw();
}][/code]