void函数中人return的含义
时间:2011-12-08
来源:互联网
{
if(i > n)
{
if(cw > bestw)
{
for(int j = 1;j <= n;j++)
bestx[j] = x[j];
bestw = cw;
}
return;
}
r = r-w[i];
if(cw+w[i]<=c)
{
x[i] = 1;
cw=cw+w[i];
Backtrack(i+1);
}
r = r+w[i];
}
这里我输入n的值为4,当执行return 之前i的值为四,执行完return语句之后i变为了2(i的初始值为1),求解释!
作者: hdk_1992 发布时间: 2011-12-08
作者: duke56 发布时间: 2011-12-08
作者: zhutou100hao 发布时间: 2011-12-08
1.编译器优化引起
2.下标溢出引起
应该与return无关的
作者: keiy 发布时间: 2011-12-08
作者: haotiantoping 发布时间: 2011-12-08
作者: sun971782067 发布时间: 2011-12-08
可能的问题
1.编译器优化引起
2.下标溢出引起
应该与return无关的
#include<iostream>
using namespace std;
//------------------------------------------------
class Loading
{
friend float MaxLoading(float[],float,int);
public:
void Backtrack(int i);
int n; //集装箱数
int *x,*bestx; //当前解 当前最优解
float *w,c,cw,bestw,r;//集装箱重量数组
//第一艘轮船的载重量,当前载重量,当前最优载重量,剩余集装箱重量
};
//-------------------------
float Maxloading(float w1[],float c1,float c2,int n1,int bestx1[])
{
Loading k;
int j;
float MAXLoad;
k.x= new int [n1+1];
k.bestx=bestx1;
k.w = w1;
k.c = c1;
k.n = n1;
k.cw = 0;
k.bestw = 0;
k.r = 0;
for(int i=1;i<=n1;i++)
k.r+=w1[i];
k.Backtrack(1);
delete [] k.x;
cout<<"船1最优装载:"<<k.bestw<<endl;
MAXLoad=k.bestw;
for( j=1;j<=n1;j++)
{
if(k.bestx[j]==0)
{
MAXLoad+=w1[j];
c2-=w1[j];
if(c2<0)
{
cout<<"找不到合理装载方案!"<<endl;
return -1;
}
}
}
cout<<"船1中的箱子:";
for( j=1;j<=n1;j++)
if(k.bestx[j]==1)
cout<<j<<" ";
cout<<endl;
cout<<"船2中的箱子:";
for( j=1;j<=n1;j++)
if(k.bestx[j]==0)
cout<<j<<" ";
cout<<endl;
return MAXLoad;
}
//----------------------------------------------------
void Loading::Backtrack(int i)
{
//搜索第i层
if(i>n) // 到达叶结点
{
if(cw>bestw) /*更新最优解*/
{
for(int j=1;j<=n;j++)
bestx[j]=x[j];
bestw = cw;
}
return;
}
r-=w[i];
if(cw+w[i]<=c)/*搜索左子树*/
{
x[i]=1;
cw+=w[i];
Backtrack(i+1);
cw-=w[i];
}
if(cw+r>bestw)/*搜索右子数*/
{
x[i] = 0;
Backtrack(i+1);
}
r+=w[i];
}
//---------------------------------------------
int main()
{
float w[20];
float c1,c2,k;
int n,bestx[20];
cout<<"输入箱子数:";
cin>>n;
cout<<"输入箱子重量:";
for(int i=1;i<=n;i++)
cin>>w[i];
cout<<"输入容量船1,船2:";
cin>>c1>>c2;
k=Maxloading(w,c1,c2,n,bestx);
if(k!=-1)cout<<"总体最优装载:"<<k<<endl;
return 1;
}
作者: hdk_1992 发布时间: 2011-12-08
设断点,跟踪看看
作者: AnYidan 发布时间: 2011-12-08
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28